From 7dd254483b3513e7bde945e08a2e412d9472fecb Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 04:53:00 +0000 Subject: [PATCH 1/2] feat(a11y): add dynamic aria-labels to icon-only toggle buttons in settings Adds dynamic `:aria-label` and `title` attributes to icon-only toggle buttons in AccountSettingsTab (Show/Hide password, Copy API token) and AISettingsTab (Show/Hide Groq API key). This improves screen reader accessibility by announcing the correct action based on the current state, and provides better tooltip context for mouse users. Co-authored-by: endlessblink <37155282+endlessblink@users.noreply.github.com> --- .Jules/palette.md | 3 +++ src/components/settings/tabs/AISettingsTab.vue | 2 +- src/components/settings/tabs/AccountSettingsTab.vue | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 .Jules/palette.md diff --git a/.Jules/palette.md b/.Jules/palette.md new file mode 100644 index 000000000..8216a3484 --- /dev/null +++ b/.Jules/palette.md @@ -0,0 +1,3 @@ +## 2024-07-27 - Dynamic ARIA labels for icon-only toggles +**Learning:** Icon-only toggle buttons (like show/hide password, show/hide API key) need dynamic `:aria-label` attributes that update based on their current state, so screen readers can announce the correct action rather than a static label. +**Action:** When adding `aria-label` to toggle buttons, use a ternary operator bound to the same state used for the icon (e.g., `:aria-label="showPassword ? 'Hide password' : 'Show password'"`). diff --git a/src/components/settings/tabs/AISettingsTab.vue b/src/components/settings/tabs/AISettingsTab.vue index a0cbd741a..c6b57cec9 100644 --- a/src/components/settings/tabs/AISettingsTab.vue +++ b/src/components/settings/tabs/AISettingsTab.vue @@ -594,7 +594,7 @@ async function onClearMemories() { spellcheck="false" autocomplete="off" /> - diff --git a/src/components/settings/tabs/AccountSettingsTab.vue b/src/components/settings/tabs/AccountSettingsTab.vue index e709c08a5..f1087d813 100644 --- a/src/components/settings/tabs/AccountSettingsTab.vue +++ b/src/components/settings/tabs/AccountSettingsTab.vue @@ -342,7 +342,7 @@ const handleChangePassword = async () => { class="form-input" placeholder="Enter new password" > - @@ -504,7 +504,7 @@ const handleChangePassword = async () => { class="form-input" @focus="(e) => (e.target as HTMLInputElement).select()" > - From 5f96b0b75c7328f587c838e3fac132b6dea84d46 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 27 Jul 2026 05:08:41 +0000 Subject: [PATCH 2/2] fix(ci): replace deprecated supabase setup-cli with local npx execution Removes the deprecated `supabase/setup-cli@v1` GitHub Action (which fails on Node 20 deprecations and rate limits) from the `canvas-sync` workflow, replacing it with direct execution of the local `npx supabase` dependency. Also updates `scripts/run-e2e.sh` to explicitly call `npx supabase status` to prevent fallback errors when extracting local Supabase keys, resolving the "Local Supabase is missing public.canonical_change_log" E2E failure caused by unapplied migrations. Co-authored-by: endlessblink <37155282+endlessblink@users.noreply.github.com> --- .github/workflows/ci.yml | 9 ++------- scripts/run-e2e.sh | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d34fd0638..54eb42e45 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,16 +83,11 @@ jobs: - name: Install Playwright (chromium) run: npx playwright install --with-deps chromium - - name: Setup Supabase CLI - uses: supabase/setup-cli@v1 - with: - version: latest - - name: Boot Supabase + run two-client Realtime e2e (R1–R7) run: | - supabase start + npx supabase start ./scripts/run-e2e.sh canvas-sync-regressions.spec.ts --project=chromium --workers=2 - name: Stop Supabase if: always() - run: supabase stop || true + run: npx supabase stop || true diff --git a/scripts/run-e2e.sh b/scripts/run-e2e.sh index 2911c1d1f..d3513ff23 100755 --- a/scripts/run-e2e.sh +++ b/scripts/run-e2e.sh @@ -6,7 +6,7 @@ set -euo pipefail # Auto-fetch keys from local Supabase if not already set -SUPABASE_STATUS_ENV="${SUPABASE_STATUS_ENV:-$(supabase status -o env 2>&1 || true)}" +SUPABASE_STATUS_ENV="${SUPABASE_STATUS_ENV:-$(npx supabase status -o env 2>&1 || true)}" if [ -z "${SUPABASE_SERVICE_ROLE_KEY:-}" ]; then # Try new-format secret key first (Supabase v2.x uses sb_secret_* instead of HS256 JWT)