From ed4ebcfa763f66ecd69cae57df2c949a7a9a8a45 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sat, 13 Jun 2026 20:23:29 +0800
Subject: [PATCH] Prepare 7.9.1 usage tips release

---
 src/Scripts/usage_tips_qa.sh |   34 +++++++++++++++++++++++++++-------
 1 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/src/Scripts/usage_tips_qa.sh b/src/Scripts/usage_tips_qa.sh
index 78834f8..3bc4a2a 100755
--- a/src/Scripts/usage_tips_qa.sh
+++ b/src/Scripts/usage_tips_qa.sh
@@ -86,9 +86,9 @@
     "Usage tips must be implemented as a native AppKit NSView",
 )
 require(
-    r"enum\s+AppGridUsageTipsMetrics\s*\{(?P<body>.*?)static\s+let\s+reservedHeight\s*:\s*CGFloat\s*=\s*128",
+    r"enum\s+AppGridUsageTipsMetrics\s*\{(?P<body>.*?)static\s+let\s+barHeight\s*:\s*CGFloat\s*=\s*136(?P<body2>.*?)static\s+let\s+reservedHeight\s*:\s*CGFloat\s*=\s*176",
     app_grid,
-    "Usage tips overlay must reserve stable bottom space for the native HUD bar",
+    "Usage tips overlay must reserve a design-reviewed multi-line bottom space for the native HUD bar",
 )
 require(
     r"NSVisualEffectView\s*\(",
@@ -125,19 +125,34 @@
     "Usage tips must ask the host to recompute width after localized text changes",
 )
 require(
-    r"availableTextWidth\s*=\s*max\s*\(\s*1\s*,\s*visualFrame\.maxX\s*-\s*titleX\s*-\s*titleDetailGap\s*-\s*trailingWidth\s*\)",
+    r"controlZoneWidth\s*:\s*CGFloat\s*=\s*176",
+    app_grid,
+    "Usage tips layout must reserve a fixed right-side control zone",
+)
+require(
+    r"availableTextWidth\s*=\s*max\s*\(\s*1\s*,\s*textRight\s*-\s*titleX\s*\)",
     app_grid,
     "Usage tips layout must allocate text from actual available AppGrid width",
 )
 require(
-    r"dotsView\.frame\s*=\s*NSRect\s*\((?P<body>.*?)x\s*:\s*buttonsGroupMinX\s*\+\s*\(buttonsWidth\s*-\s*dotsWidth\)\s*/\s*2(?P<body2>.*?)y\s*:\s*previousButton\.frame\.maxY\s*\+\s*6",
+    r"dotsView\.frame\s*=\s*NSRect\s*\((?P<body>.*?)x\s*:\s*buttonsGroupMinX\s*\+\s*\(buttonsWidth\s*-\s*dotsWidth\)\s*/\s*2(?P<body2>.*?)y\s*:\s*previousButton\.frame\.maxY\s*\+\s*buttonDotsGap",
     app_grid,
     "Usage tips page dots must sit centered below the previous/next arrow buttons",
 )
 require(
-    r"detailRight\s*=\s*previousButton\.frame\.minX\s*-\s*detailControlsGap",
+    r"detailRight\s*=\s*textRight",
     app_grid,
-    "Usage tips detail text must stop before the arrow controls when dots move below them",
+    "Usage tips detail text must stop before the fixed right-side arrow control zone",
+)
+require(
+    r"configureDetailLabel\s*\(\s*\)(?P<body>.*?)detailLabel\.lineBreakMode\s*=\s*\.byWordWrapping",
+    app_grid,
+    "Usage tip detail text must wrap naturally inside the reserved text column",
+)
+require(
+    r"detailLabel\.maximumNumberOfLines\s*=\s*2",
+    app_grid,
+    "Usage tip detail text must use the design-reviewed two-line body layout",
 )
 require(
     r"return\s+min\s*\(\s*maxAvailableWidth\s*,\s*preferredWidth\s*\)",
@@ -346,7 +361,12 @@
 require(
     r"formattedTipDetail\s*\(_\s+text\s*:\s*String\s*\)",
     app_grid,
-    "Usage tips detail text must normalize > separators to -> for display",
+    "Usage tips detail text must normalize separators for display",
+)
+require(
+    r"replacingOccurrences\s*\(\s*of\s*:\s*\"\\\\s\*\(\?:-->\|->\|>\|→\|>\)\\\\s\*\"\s*,\s*with\s*:\s*\"\\n\"",
+    app_grid,
+    "Usage tips detail text must convert -->, ->, and > separators into hard line breaks",
 )
 require(
     r"setUsageTipsBubbleDisabled\s*\(\s*inside\s*\)",

--
Gitblit v1.9.3