원클릭으로
setup-web-e2e
Scaffold a Supabase/Playwright E2E harness for a Refine/TanStack web app using Telar's Arrange/Act patterns
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Scaffold a Supabase/Playwright E2E harness for a Refine/TanStack web app using Telar's Arrange/Act patterns
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | setup-web-e2e |
| description | Scaffold a Supabase/Playwright E2E harness for a Refine/TanStack web app using Telar's Arrange/Act patterns |
| source_type | command |
| source_file | commands/setup-web-e2e.md |
Migrated from commands/setup-web-e2e.md.
references/... or workflow/..., are packaged beside this SKILL.md.agents/..., commands/..., scripts/..., resources/..., rules/..., hooks/..., or templates/..., are packaged at this plugin root.skills/orchestration/...) is packaged under source/skills/orchestration/... for exact-reference lookups; all other Telar skills exist here only as the generated adapters under the plugin-root skills/ directory.../.. when reading support files or running packaged scripts./tl-telar:setup-web-e2e; invoke it as $setup-web-e2e or through @tl-telar.skills/orchestration/<name>, load the generated Codex skill at ../orchestration-<name>/SKILL.md first. The original source copy also exists under ../../source/skills/orchestration/<name>/SKILL.md for exact Telar-source references.Scaffold a Supabase/Playwright E2E harness for a Refine or TanStack Router web app, using Telar's Arrange/Act test-data pattern instead of Supawright or ad hoc fixtures.
agents:
- web-e2e-testing-expert
[app-path] from the command argument if given (e.g. src/admin).src/admin, src/client-web, apps/web, etc.) and confirm with the user before proceeding.Delegate stack identification to the web-e2e-testing-expert agent, which distinguishes:
resources array (in <Refine resources={...}> or a config module) mapping name to list/create/edit/show routes, plus dataProvider/authProvider wiring. Test targets are the CRUD routes Refine derives from each resource.routes/ tree (or a generated routeTree.gen.ts). Test targets are the leaf routes; loaders tell you what data a scenario needs arranged before navigation.astro-web-expert if E2E is requested there instead.A single app may mix Refine (e.g. an admin panel) and TanStack Router (e.g. a client-facing surface) — detect both independently rather than assuming one framework for the whole repo. This matters for Phase 2's multi-baseURL config and any later cross-surface scenario.
skills:
- supabase-e2e-harness
- web-e2e-catalog
Per supabase-e2e-harness, scaffold factory/supabase.ts (and sibling factory/admin.ts) as a plain-fetch client against /auth/v1 and /rest/v1 — no @supabase/supabase-js inside the Playwright process, to avoid its module-transform issues under Playwright's Node/ESM runner. Keep the anon-vs-service_role header split explicit:
headers() — anon apikey + the actor's own bearer token. RLS evaluates as that user.adminHeaders() — service_role key as both apikey and bearer. Arrange only, never act.Enforce the Arrange/Act rule from the start: Arrange (users, RBAC, entitlements) goes through service_role via the factory; Act (the behavior under assertion) always runs through real UI + anon key + the actor's own JWT, so RLS actually executes. Never let service_role perform the act.
Scaffold runId namespacing (newRunId(), scopedEmail()) so every arranged row is tagged with a run-unique id — this replaces teardown entirely; do not add an afterEach cleanup step in its place.
Per web-e2e-catalog, scaffold playwright.config.ts with:
projects, each with its own baseURL, when the app spans multiple surfaces (e.g. admin + client-web).webServer entries per surface, so Playwright boots and tears down each server itself.workers: 1 and fullyParallel: false — this is a correctness choice for suites sharing a live/CI Supabase instance (cross-scenario timing races on shared aggregate state), not a perf default to "optimize away."factory/supabase.ts + factory/admin.ts scaffolded (plain-fetch, no supabase-js)playwright.config.ts scaffolded with multi-baseURL projects/webServers, workers: 1skills:
- web-e2e-locators
Using the test targets enumerated in Phase 1, write one @smoke-tagged scenario that exercises the harness end to end (arrange via service_role, act via real UI/login form). Apply web-e2e-locators locator discipline:
data-testid as the primary locator for domain-dense rows/actions (parameterized by real record id).getByRole/getByLabel for generic controls (login forms, single-instance buttons).waitForTimeout) — rely on Playwright's web-first auto-retrying assertions to absorb TanStack Query settling.Add the scenario's entry to the catalog's INDEX.md matrix (per web-e2e-catalog) with its @smoke/@basic/@full tag, so it's discoverable before it's the only thing anyone remembers to grep for.
npx playwright init-agents --loop=claude (requires Playwright 1.56+) wires the Planner/Generator/Healer loop for scaffolding and evolving the durable, checked-in suite.@smoke scenario authored and passing locallyINDEX.md entry added with correct tagskills:
- web-e2e-review
Wire the CI job to run against a fresh, ephemeral local Supabase stack, never a shared persistent CI database:
supabase start
supabase db reset
./scripts/seed-e2e.sh # or the app's equivalent seed script
pnpm test:e2e:regression
supabase stop
Before declaring the harness done, run web-e2e-review against the new scenario(s). Treat any P0 finding (missing await on expect, swallowed errors, service_role used in an act, tautological or missing assertions) as a blocker, not a note — a green suite proves nothing if it silently always passes.
# P0 checks (see web-e2e-review for the full 24-pattern taxonomy)
grep -rn "expect(" tests/ e2e/ | grep -v "await expect("
grep -rln "SUPABASE_SERVICE_KEY\|service_role" tests/ e2e/ --include="*.spec.ts" | grep -v "factory/"
grep -rn "waitForTimeout" tests/ e2e/
This command scaffolds files only — it does not run git add/git commit/git push. Honor the user's git policy: always ask before committing or pushing, per the user's global instructions.
web-e2e-review run against every new/changed spec, zero P0 findings outstanding@supabase/supabase-js, no Supawright)playwright.config.ts scaffolded (workers: 1, dual webServers where applicable)@smoke scenario authored using data-testid/getByRole locators, zero fixed sleepsINDEX.md entry added for the new scenarioweb-e2e-review run with zero outstanding P0 findingsEnd-to-end orchestrated execution. Takes a feature description and drives the entire pipeline — plan, plan review (3 fresh reviewers), WU decomposition, 4-phase execution loop per WU, final review, COMMIT-READY emit. Honors user's git policy (no auto-commit).
`--default-domain` comes from the project-detect framework signal (orchestrator Step 5b / project-context); it only decides how UI files with no strong path marker are classified. `--risk-tier` is the WU's `risk_tier` fi
**Capture the WU baseline ONCE per WU, before attempt 1 (NOT on retries).** This is what makes file-scope checks correct across a multi-WU run where the user has not yet committed prior WUs (per the `ben yapacagim` git p
This gate has **two interchangeable execution paths that MUST emit the identical aggregated verdict object** (Step 3). The prose path below is the canonical fallback and the single source of truth for reviewer prompts an
A baton-based system for building mobile features across multiple Claude Code sessions with persistent progress tracking and simulator verification between steps.
Set up end-to-end testing framework with CI integration