From 86f0b4bd20cdec86dfb5bdb7978d1f6ff4af111a Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Fri, 14 Aug 2026 22:41:54 +0800
Subject: [PATCH] [verified] feat: export performance diagnostics

---
 C3.tools/round1-three-zone-linkage-fixture-qa.sh |   74 ++++++++++++++++++++++--------------
 1 files changed, 45 insertions(+), 29 deletions(-)

diff --git a/C3.tools/round1-three-zone-linkage-fixture-qa.sh b/C3.tools/round1-three-zone-linkage-fixture-qa.sh
index 84b821a..af79f00 100755
--- a/C3.tools/round1-three-zone-linkage-fixture-qa.sh
+++ b/C3.tools/round1-three-zone-linkage-fixture-qa.sh
@@ -131,6 +131,7 @@
     --round01-debug-overlay-width="$OVERLAY_WIDTH"
     --round01-disable-screenshot-refresh
     --round01-debug-window-activation
+    --round01-waterfall-view-mode=vertical
     --round01-debug-mouse-sequence="$sequence"
     --round01-quick-switch-report="$report"
   )
@@ -295,7 +296,7 @@
 PY
 }
 
-assert_space_click_report() {
+assert_space_click_filter_report() {
   /usr/bin/python3 - "$1" <<'PY'
 import json
 import sys
@@ -314,30 +315,33 @@
 root = report.get("rootView", {})
 columns = sorted(root.get("waterfallColumns", []), key=lambda column: column.get("appGroupIndex", 0))
 target_space_id = 1
-first_space_card = None
-for column in columns:
-    cards = sorted(column.get("cards", []), key=lambda card: card.get("windowIndex", 0))
-    first_space_card = next((card for card in cards if card.get("primarySpaceID") == target_space_id), None)
-    if first_space_card is not None:
-        break
-
-require(first_space_card is not None, "fixture must include at least one window in Space A1")
-expected_window_id = first_space_card.get("windowID")
+cards = [card for column in columns for card in column.get("cards", [])]
+segments = root.get("spaceLaneSegments", [])
+locked_segments = [segment for segment in segments if "locked" in segment.get("visualStates", [])]
 
 require(report.get("snapshotLoaded") is True, "snapshotLoaded must be true")
-require(report.get("quickSwitchVisible") is False, "click-space must close Quick Switch after committing a window in that Space")
+require(report.get("quickSwitchVisible") is True, "click-space must keep Quick Switch visible after locking Space filter")
+require(report.get("spaceFilterActive") is True, "click-space must enable session Space filter")
+require(report.get("spaceFilterLockedSpaceID") == target_space_id, "click-space must lock the clicked Space")
+require(report.get("lastSpaceFilterAction") == "lock", "click-space must record a lock action")
+require(root.get("spaceFilterActive") is True, "root report must expose active Space filter")
+require(root.get("spaceFilterLockedSpaceID") == target_space_id, "root report must expose the locked Space")
 require(root.get("lastSpaceLaneClickSpaceID") == target_space_id, "click-space must record the clicked Space")
-require(root.get("spaceLaneFocusedSpaceID") is None, "click-space must not reuse persistent focus as its behavior")
-require(root.get("lastCommittedWindowID") == expected_window_id, "click-space must commit the first window in the clicked Space")
-require(report.get("lastCommittedWindowID") == expected_window_id, "session must surface the Space click commit")
-require(report.get("lastActivationWindowID") == expected_window_id, "activation window must match the first window in clicked Space")
-require(report.get("lastActivationResult") == "activated", "debug activation must activate the clicked Space window")
-require(report.get("lastCommitSource") == "mouse", "click-space commit source must be mouse")
+require(root.get("spaceLaneFocusedSpaceID") is None, "click-space must not reuse persistent hover focus as its behavior")
+require(report.get("lastCommittedWindowID") is None, "ordinary click-space must not commit a window")
+require(report.get("lastActivationWindowID") is None, "ordinary click-space must not activate a window")
+require(report.get("lastActivationResult") is None, "ordinary click-space must not report activation")
+require(report.get("lastCommitSource") is None, "ordinary click-space must not report a commit source")
+require(cards, "fixture must include filtered cards for Space A1")
+require(all(card.get("primarySpaceID") == target_space_id for card in cards), "click-space filter must only keep windows in clicked Space")
+require(len(locked_segments) == 1, "exactly one Space Lane segment must expose locked")
+require(locked_segments[0].get("spaceID") == target_space_id, "locked segment must be the clicked Space")
 
 print(json.dumps({
     "clickedSpaceID": root.get("lastSpaceLaneClickSpaceID"),
-    "lastCommittedWindowID": root.get("lastCommittedWindowID"),
-    "lastActivationResult": report.get("lastActivationResult")
+    "lockedSpaceID": root.get("spaceFilterLockedSpaceID"),
+    "visibleCardSpaceIDs": sorted({card.get("primarySpaceID") for card in cards}),
+    "quickSwitchVisible": report.get("quickSwitchVisible")
 }, indent=2, ensure_ascii=False))
 PY
 }
@@ -613,18 +617,30 @@
 require(focused[0].get("label") == "B1", "hovered multi-display Space must be B1")
 require("focused" in focused[0].get("visualStates", []), "focused B1 segment must expose focused visual state")
 
-idle_empty_segments = [
+empty_segments = [
     segment for segment in segments
     if segment.get("windowCount") == 0
-    and segment.get("isFocused") is not True
-    and segment.get("isCurrent") is not True
-    and segment.get("isAppAssociated") is not True
-    and segment.get("isWindowAssociated") is not True
 ]
-require(idle_empty_segments, "multi-display visual fixture must include at least one idle empty Space")
+require(empty_segments, "multi-display visual fixture must include at least one empty Space")
 require(
-    all(segment.get("backgroundKind") == "clear" for segment in idle_empty_segments),
-    "idle empty Spaces must not keep a dirty gray fill"
+    {"A3", "B1"}.issubset({segment.get("label") for segment in empty_segments}),
+    "multi-display visual fixture must include the A3/B1 empty Space regression pair"
+)
+require(
+    all(segment.get("backgroundKind") == "clear" for segment in empty_segments),
+    "empty Spaces must not keep a dirty gray fill, even when focused/current/associated"
+)
+require(
+    all(not segment.get("gradientColors", []) for segment in empty_segments),
+    "empty Spaces must clear stale gradient colors"
+)
+require(
+    all(segment.get("backgroundColor", {}).get("alpha", 1) <= 0.01 for segment in empty_segments),
+    "empty Spaces must keep transparent fill"
+)
+require(
+    all(segment.get("shadowOpacity", 1) <= 0.01 for segment in empty_segments),
+    "empty Spaces must not draw a shadow that reads as an interior gray fill"
 )
 idle_occupied_segments = [
     segment for segment in segments
@@ -690,8 +706,8 @@
 run_report "$CLEAR_REPORT" "hover-space:1,hover-card:0:0" "hover-card:0:0"
 assert_space_focus_clear_report "$CLEAR_REPORT"
 
-run_report "$SPACE_CLICK_REPORT" "click-space:1" "click-space:1" "$FIXTURE_APP_COUNT" "$FIXTURE_WINDOWS_PER_APP" hidden
-assert_space_click_report "$SPACE_CLICK_REPORT"
+run_report "$SPACE_CLICK_REPORT" "click-space:1" "click-space:1" "$FIXTURE_APP_COUNT" "$FIXTURE_WINDOWS_PER_APP" visible
+assert_space_click_filter_report "$SPACE_CLICK_REPORT"
 
 run_report "$REMOTE_REPORT" "hover-space:1,click-app:$REMOTE_APP_INDEX" "click-app:$REMOTE_APP_INDEX" "$FIXTURE_APP_COUNT" "$FIXTURE_WINDOWS_PER_APP" hidden
 assert_remote_click_report "$REMOTE_REPORT"

--
Gitblit v1.9.3