Skip to content

feat(skills): add run-upline skill, verified against staging - #96

Merged
chiptus merged 12 commits into
mainfrom
claude/skills-command-45yepf
Jul 8, 2026
Merged

feat(skills): add run-upline skill, verified against staging#96
chiptus merged 12 commits into
mainfrom
claude/skills-command-45yepf

Conversation

@chiptus

@chiptus chiptus commented Jul 6, 2026

Copy link
Copy Markdown
Owner

Adds the run-upline skill (SKILL.md + a Chromium driver) to boot and screenshot the app headlessly against staging Supabase, and installs the official playwright-cli skill. Lets a future agent verify UI changes against the real running app with real data, not just tests.

Verification

  • pnpm install --ignore-scripts then pnpm run dev (with staging VITE_SUPABASE_URL/VITE_SUPABASE_PUBLISHABLE_KEY in env) — dev server comes up on 8080.
  • node .claude/skills/run-upline/driver.mjs / /tmp/home.png — real festival cards render (Anta, Boom Festival, Desert Bass, …), matching a direct REST call to the same staging endpoint.
  • node .claude/skills/run-upline/driver.mjs /festivals/anta /tmp/anta.png — real artist list and set times render for that festival.
  • node .claude/skills/run-upline/driver.mjs /festivals/does-not-exist — Supabase 406 surfaces cleanly through the app's error boundary.
  • /privacy and /terms render fully without a backend.

@vercel

vercel Bot commented Jul 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
upline Ready Ready Preview, Comment Jul 8, 2026 5:57am

@qodo-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

Comment thread .claude/skills/run-upline/SKILL.md Outdated
Comment thread .claude/skills/run-upline/SKILL.md Outdated
Comment thread .claude/skills/run-upline/SKILL.md Outdated
Fix driver.mjs to reach *.supabase.co through the agent proxy (proxy
wiring, localhost bypass, and TLS 1.2 cap to dodge a ClientHello reset)
and rewrite SKILL.md's Setup/Run around staging env vars instead of the
placeholder .env.local approach. Verified real festival/artist data
renders end-to-end.
@chiptus chiptus changed the title feat(skills): add run-upline launch skill feat(skills): add run-upline skill, verified against staging Jul 7, 2026
Comment thread .claude/skills/run-upline/SKILL.md Outdated
Comment thread .claude/skills/run-upline/SKILL.md Outdated
Per PR review: the VITE_SUPABASE_PUBLISHABLE_KEY env var rename is
already live, so the alias workaround is unnecessary; and allowed-tools
scopes pnpm to only install/run dev instead of a full wildcard.
The Setup section no longer copies .env.local.example (which pointed
at a dead local Supabase URL), so the actual failure mode when staging
prerequisites are missing is now an immediate boot-time throw, not a
perpetual loading spinner + connection-refused. Verified by unsetting
the env vars and re-driving the app.
Root-cause mechanism detail for the proxy/TLS issue already lives as
a comment in driver.mjs; SKILL.md doesn't need to duplicate it.
Comment thread .claude/skills/run-upline/SKILL.md Outdated
Scope allowed-tools' node entry to driver.mjs specifically instead of
any node invocation. Drop the Setup prerequisite check (env + curl to
Supabase) since the driver's own error output already surfaces a
missing/stale env var clearly (see Gotchas) — lets env drop from
allowed-tools too; curl stays for the dev-server readiness poll.
Only remaining curl use is the fixed readiness-poll invocation against
127.0.0.1:8080 in the run loop; match it exactly instead of allowing
any curl invocation, consistent with the other repo skills that only
use trailing-wildcard prefixes (mid-string wildcards aren't a pattern
this permission system supports).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces new agent skills to run the UpLine Vite SPA locally and verify UI behavior via headless Chromium screenshots against staging Supabase, and updates the Vite dev server host binding to support that workflow.

Changes:

  • Add a run-upline skill with a Node driver that launches Chromium and captures screenshots for specific routes.
  • Vendor the playwright-cli skill documentation and reference guides for interactive browser automation.
  • Update Vite dev server config (server.host) to change how the dev server binds to network interfaces.

Reviewed changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
vite.config.ts Changes Vite dev server host binding behavior.
.claude/skills/run-upline/SKILL.md Documents the new run/screenshot workflow and environment constraints.
.claude/skills/run-upline/driver.mjs Implements headless navigation + screenshot capture via Playwright/Chromium.
.claude/skills/playwright-cli/SKILL.md Adds the Playwright CLI skill documentation and command reference.
.claude/skills/playwright-cli/references/video-recording.md Adds reference docs for recording flows.
.claude/skills/playwright-cli/references/tracing.md Adds reference docs for tracing.
.claude/skills/playwright-cli/references/test-generation.md Adds reference docs for generating tests.
.claude/skills/playwright-cli/references/storage-state.md Adds reference docs for storage state management.
.claude/skills/playwright-cli/references/spec-driven-testing.md Adds reference docs for spec-driven workflows.
.claude/skills/playwright-cli/references/session-management.md Adds reference docs for session isolation/management.
.claude/skills/playwright-cli/references/running-code.md Adds reference docs for running custom Playwright code.
.claude/skills/playwright-cli/references/request-mocking.md Adds reference docs for request interception/mocking.
.claude/skills/playwright-cli/references/playwright-tests.md Adds reference docs for running/debugging tests.
.claude/skills/playwright-cli/references/element-attributes.md Adds reference docs for inspecting element attributes.

Comment thread vite.config.ts
Comment thread .claude/skills/run-upline/driver.mjs
Comment thread .claude/skills/run-upline/driver.mjs Outdated
Comment thread .claude/skills/run-upline/driver.mjs Outdated
Comment thread .claude/skills/run-upline/SKILL.md
- vite.config.ts: bind dev server to 127.0.0.1 instead of all
  interfaces (host: true) — the driver only ever needs 127.0.0.1, and
  the LAN exposure was an unintended side effect of fixing IPv6-only
  binding.
- driver.mjs: throw a clear error if the Chromium glob matches
  nothing, instead of silently launching with executablePath: undefined.
- driver.mjs: replace "networkidle" with load + bounded networkidle
  (8s) + a text-based "Loading <noun>..." fallback check, so a future
  long-lived connection can't cause a 30s hang, while keeping the
  correctness networkidle already had for this app's multi-stage
  fetches (verified against /, /privacy, /festivals/anta).
- driver.mjs: wrap navigation/screenshot in try/finally so a thrown
  error still closes the browser instead of leaking a headless
  Chromium process across repeated agent runs (verified no orphaned
  process after a forced connection-refused failure).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 14 out of 14 changed files in this pull request and generated 3 comments.

Comment thread vite.config.ts
Comment thread .claude/skills/run-upline/driver.mjs Outdated
Comment thread .claude/skills/run-upline/driver.mjs
- vite.config.ts: remove server.host entirely instead of pinning
  127.0.0.1 — Vite's own default already binds both 127.0.0.1 and
  localhost with no LAN exposure, which was the actual goal. Pinning
  to 127.0.0.1 alone risked breaking Playwright's webServer/baseURL,
  which poll http://localhost:8080 for e2e (localhost can resolve to
  ::1 first on some systems).
- driver.mjs: build the target URL with `new URL(path, base)` instead
  of naive string concatenation, so a BASE_URL with a path prefix or a
  path missing its leading slash still resolves correctly.

Re-verified the TLS-downgrade launch flags (--ignore-certificate-errors,
--ssl-version-max=tls1.2) are still required: removing them and giving
the request a long enough timeout (20s) still surfaces the same
net::ERR_CONNECTION_RESET on the Supabase request as originally
diagnosed — they were just slower to fail than the driver's normal
wait budget, not actually unnecessary.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 14 out of 14 changed files in this pull request and generated 4 comments.

Comment thread vite.config.ts
Comment thread .claude/skills/playwright-cli/SKILL.md
Comment thread .claude/skills/run-upline/SKILL.md
Comment thread .claude/skills/run-upline/driver.mjs
@chiptus
chiptus merged commit 224c5be into main Jul 8, 2026
10 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants