From 1d39afa3b6393fb018c510ccc7a47bbc1487a79a Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sun, 28 Jun 2026 09:38:30 -0400 Subject: [PATCH] =?UTF-8?q?feat(modal):=20green=20=E2=9C=93=20/=20red=20?= =?UTF-8?q?=E2=9C=97=20verdict=20pair=20on=20suggestion=20rows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the single "Accept" pill in the modal Suggestions rail with the eval card's green ✓ / red ✗ language: ✓ accepts the tag (positive), ✗ dismisses it for this image — which already persists a TagSuggestionRejection (hard negative the heads train on). The pair occupies ~the footprint of the old pill, so per-image rejection becomes a one-click peer of accepting instead of being buried in the kebab. Dismiss moves off the 3-dot menu, so the kebab now only carries alias actions and is hidden when none apply (centroid hits with no alias option). Toward #1134 (native per-image negatives in the rail). The bigger piece — heads as a suggestion source feeding this panel — is still ahead. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa --- .../src/components/modal/SuggestionItem.vue | 66 +++++++++++++------ 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/frontend/src/components/modal/SuggestionItem.vue b/frontend/src/components/modal/SuggestionItem.vue index 1b79848..c99107a 100644 --- a/frontend/src/components/modal/SuggestionItem.vue +++ b/frontend/src/components/modal/SuggestionItem.vue @@ -1,8 +1,8 @@ @@ -57,6 +68,12 @@ const props = defineProps({ suggestion: { type: Object, required: true } }) defineEmits(['accept', 'alias', 'remove-alias', 'dismiss']) const scorePct = computed(() => `${Math.round(props.suggestion.score * 100)}%`) +// Kebab now only carries alias actions: show it when this suggestion can be +// aliased (raw model key, not yet aliased) or is already aliased (so it can be +// un-aliased). Centroid hits (no raw_name, no alias) have an empty menu → hide. +const hasMenu = computed(() => + Boolean(props.suggestion.raw_name) || Boolean(props.suggestion.via_alias) +)