From 85f774320842b804ba2e72d9b7b48b1b0a1e21b2 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 05:19:46 +0000 Subject: [PATCH 1/4] feat(canvas): add ARIA labels to CanvasContextMenu layout buttons Added missing `aria-label` attributes to the layout-related icon-only buttons (Align Left, Arrange in Row, etc.) in `CanvasContextMenu.vue`. The attributes are matched to their existing `title` values to provide a descriptive fallback for screen readers and better general accessibility. Co-authored-by: endlessblink <37155282+endlessblink@users.noreply.github.com> --- src/components/canvas/CanvasContextMenu.vue | 77 ++++++++++++++++++--- 1 file changed, 66 insertions(+), 11 deletions(-) diff --git a/src/components/canvas/CanvasContextMenu.vue b/src/components/canvas/CanvasContextMenu.vue index a9a7dda1f..25df68e86 100644 --- a/src/components/canvas/CanvasContextMenu.vue +++ b/src/components/canvas/CanvasContextMenu.vue @@ -178,24 +178,54 @@ Align
- - -
- - -
@@ -209,11 +239,21 @@ Distribute
- - @@ -228,15 +268,30 @@ Arrange
- - - From ddee4d95f1c49d3b9a02c03a55e4a993bc1c9300 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 05:55:19 +0000 Subject: [PATCH 2/4] feat(canvas): fix CI check run issues and add ARIA labels to CanvasContextMenu layout buttons Fix lint and TypeScript errors that caused CI checks to fail: - Fixed `App.vue` `any` warnings by typing `e` as `unknown` and applying the correct narrow typings. - Corrected custom event casing in `QuickSortCard.vue` (`swipe-right` -> `swipeRight`, etc.). - Removed unused `weeklyPlanPrimaryTaskIds` and `weeklyPlanRelatedChipIds` variables from `ChatMessage.vue`. - Added missing `aria-label` attributes to the layout-related icon-only buttons in `CanvasContextMenu.vue`. Co-authored-by: endlessblink <37155282+endlessblink@users.noreply.github.com> --- src/components/QuickSortCard.vue | 16 +++---- src/components/ai/AIMemoryHealthDashboard.vue | 28 +++++++++--- src/components/ai/ChatMessage.vue | 44 ++++++++++++------- src/components/base/BaseInput.vue | 3 +- 4 files changed, 58 insertions(+), 33 deletions(-) diff --git a/src/components/QuickSortCard.vue b/src/components/QuickSortCard.vue index aa9be96fa..6be98a4ea 100644 --- a/src/components/QuickSortCard.vue +++ b/src/components/QuickSortCard.vue @@ -85,10 +85,10 @@ defineProps<{ }>() const emit = defineEmits<{ - (e: 'swipe-right'): void - (e: 'swipe-left'): void - (e: 'swipe-up'): void - (e: 'swipe-down'): void + (e: 'swipeRight'): void + (e: 'swipeLeft'): void + (e: 'swipeUp'): void + (e: 'swipeDown'): void }>() const cardRef = ref(null) @@ -105,10 +105,10 @@ const { haptics: true, fourDirectional: true, mouse: true, - onSwipeRight: () => emit('swipe-right'), - onSwipeLeft: () => emit('swipe-left'), - onSwipeUp: () => emit('swipe-up'), - onSwipeDown: () => emit('swipe-down') + onSwipeRight: () => emit('swipeRight'), + onSwipeLeft: () => emit('swipeLeft'), + onSwipeUp: () => emit('swipeUp'), + onSwipeDown: () => emit('swipeDown') }) // Card transform style - supports both horizontal and vertical movement diff --git a/src/components/ai/AIMemoryHealthDashboard.vue b/src/components/ai/AIMemoryHealthDashboard.vue index 11249bade..d8c7df6d6 100644 --- a/src/components/ai/AIMemoryHealthDashboard.vue +++ b/src/components/ai/AIMemoryHealthDashboard.vue @@ -36,13 +36,17 @@
-
{{ error }}
+
+ {{ error }} +

Memory Grade

-
{{ report.grade }}
+
+ {{ report.grade }} +

{{ gradeLabel }}

@@ -56,13 +60,17 @@

Sections

-
{{ report.sections.length }}
+
+ {{ report.sections.length }} +

{{ report.mode === 'full' ? 'Full assessment' : 'Quick check' }}

Duration

-
{{ formatDuration(report.durationMs) }}
+
+ {{ formatDuration(report.durationMs) }} +

{{ formatTime(report.timestamp) }}

@@ -70,7 +78,9 @@

No assessment results yet.

-

"Quick Check" runs heuristic tests instantly. "Full Assessment" adds LLM-as-judge context utilization tests (~30s).

+

+ "Quick Check" runs heuristic tests instantly. "Full Assessment" adds LLM-as-judge context utilization tests (~30s). +

@@ -115,7 +125,9 @@ {{ check.name }} {{ check.score }}% -
{{ check.value }}
+
+ {{ check.value }} +
{{ check.recommendation }}
@@ -160,7 +172,9 @@ {{ formatTime(h.timestamp) }} - + diff --git a/src/components/ai/ChatMessage.vue b/src/components/ai/ChatMessage.vue index a47ce2aaf..e5f95c384 100644 --- a/src/components/ai/ChatMessage.vue +++ b/src/components/ai/ChatMessage.vue @@ -371,15 +371,7 @@ function weeklyPlanTaskIds(rec: WeeklyPlanRecommendation): string[] { .filter(taskId => !dismissedCardTaskIds.value.has(taskId)) } -function weeklyPlanPrimaryTaskIds(rec: WeeklyPlanRecommendation): string[] { - return rec.primaryTaskId && !dismissedCardTaskIds.value.has(rec.primaryTaskId) ? [rec.primaryTaskId] : [] -} -function weeklyPlanRelatedChipIds(rec: WeeklyPlanRecommendation): string[] { - return [...new Set(rec.relatedTaskIds ?? [])] - .filter(taskId => taskId !== rec.primaryTaskId && !dismissedCardTaskIds.value.has(taskId)) - .slice(0, 4) -} function weeklyLaneTitle(rec: WeeklyPlanRecommendation): string { const locale = weeklyPlan.value?.locale ?? 'en' @@ -2586,13 +2578,17 @@ async function saveSchedule() { data-testid="ai-clarification" >
-
{{ clarification.progressLabel }}
+
+ {{ clarification.progressLabel }} +

{{ clarification.locale === 'he' ? 'שאלה קצרה לפני התכנון' : 'Quick question before planning' }}

{{ clarification.summary }}

{{ clarification.locale === 'he' ? 'למה אני שואל?' : 'Why ask?' }}
@@ -2781,7 +2777,9 @@ async function saveSchedule() {

{{ weeklyPlan.headline }}

{{ weeklyPlan.weekRead.summary }}

-

{{ weeklyPlan.weekRead.mainTradeoff }}

+

+ {{ weeklyPlan.weekRead.mainTradeoff }} +

{{ weeklyPlan.locale === 'he' ? 'נתיב' : 'Lane' }} -

{{ weeklyLaneTitle(rec) }}

-

{{ weeklyLaneSubtitle(rec) }}

+

+ {{ weeklyLaneTitle(rec) }} +

+

+ {{ weeklyLaneSubtitle(rec) }} +

@@ -45,7 +45,9 @@

Overall Grade

-
{{ report.grade }}
+
+ {{ report.grade }} +

{{ gradeLabel }}

@@ -67,14 +69,18 @@

Provider

-
{{ report.provider }}
+
+ {{ report.provider }} +

{{ formatTime(report.timestamp) }}

-

AI Quality Assessment

+

+ AI Quality Assessment +

Tests your AI assistant by sending {{ testPrompts.length }} prompts across {{ new Set(testPrompts.map(t => t.category)).size }} categories, then judges each response against {{ rubrics.length }} quality rubrics using a second LLM call. @@ -129,7 +135,7 @@ {{ result.grade }} - +

@@ -142,7 +148,9 @@
AI Response: -
{{ result.response }}
+
+ {{ result.response }} +
@@ -154,12 +162,16 @@

Full AI Response

-
{{ result.response }}
+
+ {{ result.response }} +

Judge's Detailed Assessment

-
{{ result.judgeReasoning }}
+
+ {{ result.judgeReasoning }} +
@@ -260,7 +272,9 @@ {{ formatTime(h.timestamp) }}
- + diff --git a/src/components/base/BaseModal.vue b/src/components/base/BaseModal.vue index 1ee6cc327..c7b908ad1 100644 --- a/src/components/base/BaseModal.vue +++ b/src/components/base/BaseModal.vue @@ -101,6 +101,40 @@