From d5631177e05b2d3abfecda1591353cdb39e4c273 Mon Sep 17 00:00:00 2001 From: flemming-it Date: Tue, 5 May 2026 22:41:26 +0200 Subject: [PATCH] fix(ui): stat-tile overflow + visible build version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two issues: 1. _StatTile in the Doctor page overflowed by ~6px on narrow widths because the Row containing the icon + label "AUDIT CHAIN" with letterSpacing=0.6 didn't fit in the ~90px constraint per tile (4 tiles in a Row sharing the page width). Fix: smaller icon (16→14), tighter gap, label wrapped in Flexible with TextOverflow.ellipsis, and the longest label shortened "AUDIT CHAIN" → "AUDIT" with the chain count moved to the subtitle. 2. The new redesign was easy to mistake for the previous build from the outside. Add a small monospaced version line right under "F∆I Studio" in the sidebar header: F∆I Studio v0.7.1 · warm-minimalism Self-identifying — "wrong build" is now visible without reading the about dialog. Bumps fai_studio 0.7.0 -> 0.7.1. Signed-off-by: flemming-it --- lib/main.dart | 15 ++++++++++++++- lib/pages/doctor.dart | 23 +++++++++++++---------- pubspec.yaml | 2 +- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 9cb5c59..7d0a9bb 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -16,6 +16,11 @@ import 'theme/theme.dart'; import 'theme/tokens.dart'; import 'widgets/widgets.dart'; +/// Studio's own build version. Bump on every UI commit so the +/// running app self-identifies — visible in the sidebar header +/// and quick-glance proof that you're seeing the current build. +const String kStudioVersion = '0.7.1'; + Future main() async { WidgetsFlutterBinding.ensureInitialized(); // Restore the persisted endpoint and theme mode before the @@ -218,7 +223,15 @@ class _Sidebar extends StatelessWidget { fontWeight: FontWeight.w600, ), ), - const SizedBox(height: FaiSpace.xs), + const SizedBox(height: 2), + Text( + 'v$kStudioVersion · warm-minimalism', + style: FaiTheme.mono( + size: 10, + color: theme.colorScheme.primary, + ), + ), + const SizedBox(height: FaiSpace.md), // Connection pill. Padding( padding: const EdgeInsets.symmetric(horizontal: FaiSpace.lg), diff --git a/lib/pages/doctor.dart b/lib/pages/doctor.dart index 90d0669..b749e3a 100644 --- a/lib/pages/doctor.dart +++ b/lib/pages/doctor.dart @@ -142,10 +142,10 @@ class _SummaryStrip extends StatelessWidget { ), const SizedBox(width: FaiSpace.md), _StatTile( - label: 'Audit chain', + label: 'Audit', value: snapshot.chainHealthy ? '✓' : '⚠', subtitle: - '${snapshot.eventChainVerified}/${snapshot.eventChainTotal} verified', + '${snapshot.eventChainVerified}/${snapshot.eventChainTotal} chain', icon: Icons.shield_outlined, tone: snapshot.chainHealthy ? FaiPillTone.success @@ -196,14 +196,17 @@ class _StatTile extends StatelessWidget { children: [ Row( children: [ - Icon(icon, size: 16, color: theme.colorScheme.onSurfaceVariant), - const SizedBox(width: FaiSpace.sm), - Text( - label.toUpperCase(), - style: theme.textTheme.labelSmall?.copyWith( - color: theme.colorScheme.onSurfaceVariant, - letterSpacing: 0.6, - fontSize: 10, + Icon(icon, size: 14, color: theme.colorScheme.onSurfaceVariant), + const SizedBox(width: FaiSpace.xs), + Flexible( + child: Text( + label.toUpperCase(), + overflow: TextOverflow.ellipsis, + style: theme.textTheme.labelSmall?.copyWith( + color: theme.colorScheme.onSurfaceVariant, + letterSpacing: 0.5, + fontSize: 10, + ), ), ), ], diff --git a/pubspec.yaml b/pubspec.yaml index 29a623f..5cf6026 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: fai_studio description: "F∆I Studio — desktop GUI for the F∆I hub" publish_to: 'none' -version: 0.1.0 +version: 0.7.1 environment: sdk: ^3.11.0-200.1.beta