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-close-fixture-qa.sh |   24 ++++++++++++++++--------
 1 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/C3.tools/round1-close-fixture-qa.sh b/C3.tools/round1-close-fixture-qa.sh
index facf709..e266c67 100755
--- a/C3.tools/round1-close-fixture-qa.sh
+++ b/C3.tools/round1-close-fixture-qa.sh
@@ -297,8 +297,8 @@
 require(report.get("lastCloseTargetKind") == "window", "confirmed window close must record window target")
 require(report.get("lastCloseWindowID") is not None, "confirmed window close must record target window")
 require(report.get("lastCloseResult") == "requested", "debug window close service must return requested")
-require(report.get("lastCloseWindowID") not in visible_window_ids, "confirmed window close must optimistically remove the stale card from Waterfall")
-require(report.get("suppressedCloseTargetCount") == 1, "confirmed window close must expose one suppressed close target")
+require(report.get("lastCloseWindowID") in visible_window_ids, "requested-but-still-present window close must keep the card visible")
+require(report.get("suppressedCloseTargetCount") == 0, "requested-but-still-present window close must not suppress the card")
 require(root.get("closeConfirmationVisible") is False, "confirmed window close must hide confirmation")
 require(root.get("closeFeedbackVisible") is True, "confirmed window close must show failure feedback when target remains")
 require(root.get("closeFeedbackKind") == "failure", "confirmed window close feedback must be failure")
@@ -310,6 +310,8 @@
     "lastCloseTargetKind": report.get("lastCloseTargetKind"),
     "lastCloseResult": report.get("lastCloseResult"),
     "lastDismissReason": report.get("lastDismissReason"),
+    "stillVisible": report.get("lastCloseWindowID") in visible_window_ids,
+    "suppressedCloseTargetCount": report.get("suppressedCloseTargetCount"),
     "closeFeedbackKind": root.get("closeFeedbackKind"),
     "closeFeedbackMessage": root.get("closeFeedbackMessage")
 }, indent=2, ensure_ascii=False))
@@ -415,8 +417,8 @@
 require(report.get("quickSwitchVisible") is True, "opt-out confirmed close must keep Quick Switch visible")
 require(report.get("lastCloseTargetKind") == "window", "opt-out confirmed close must record window target")
 require(report.get("lastCloseResult") == "requested", "opt-out confirmed close must request close")
-require(report.get("lastCloseWindowID") not in visible_window_ids, "opt-out confirmed close must optimistically remove the stale card")
-require(report.get("suppressedCloseTargetCount") == 1, "opt-out confirmed close must expose one suppressed close target")
+require(report.get("lastCloseWindowID") in visible_window_ids, "opt-out requested-but-still-present close must keep the card visible")
+require(report.get("suppressedCloseTargetCount") == 0, "opt-out requested-but-still-present close must not suppress the card")
 require(root.get("closeConfirmationVisible") is False, "opt-out confirmed close must hide confirmation")
 require(root.get("pendingCloseOptOut") is False, "opt-out confirmed close must clear temporary checkbox state")
 require(root.get("closeFeedbackKind") == "failure", "opt-out confirmed close must still verify close result")
@@ -424,6 +426,8 @@
     "case": "cardOptOutConfirmed",
     "lastCloseTargetKind": report.get("lastCloseTargetKind"),
     "lastCloseResult": report.get("lastCloseResult"),
+    "stillVisible": report.get("lastCloseWindowID") in visible_window_ids,
+    "suppressedCloseTargetCount": report.get("suppressedCloseTargetCount"),
     "pendingCloseOptOut": root.get("pendingCloseOptOut"),
     "closeConfirmationVisible": root.get("closeConfirmationVisible")
 }, indent=2, ensure_ascii=False))
@@ -454,8 +458,8 @@
 require(report.get("quickSwitchVisible") is True, "second close after opt-out must keep Quick Switch visible")
 require(report.get("lastCloseTargetKind") == "window", "second close after opt-out must directly request window close")
 require(report.get("lastCloseResult") == "requested", "second close after opt-out must call close service")
-require(report.get("lastCloseWindowID") not in visible_window_ids, "second close after opt-out must optimistically remove the stale card")
-require(report.get("suppressedCloseTargetCount") == 1, "second close after opt-out must expose one suppressed close target")
+require(report.get("lastCloseWindowID") in visible_window_ids, "second requested-but-still-present close must keep the card visible")
+require(report.get("suppressedCloseTargetCount") == 0, "second requested-but-still-present close must not suppress the card")
 require(root.get("pendingCloseTargetKind") is None, "second close after opt-out must not create pending close target")
 require(root.get("closeConfirmationVisible") is False, "second close after opt-out must not show confirmation")
 require(root.get("closeFeedbackKind") == "failure", "second close after opt-out must still verify close result")
@@ -463,6 +467,8 @@
     "case": "cardOptOutSecondClose",
     "lastCloseTargetKind": report.get("lastCloseTargetKind"),
     "lastCloseResult": report.get("lastCloseResult"),
+    "stillVisible": report.get("lastCloseWindowID") in visible_window_ids,
+    "suppressedCloseTargetCount": report.get("suppressedCloseTargetCount"),
     "pendingCloseTargetKind": root.get("pendingCloseTargetKind"),
     "closeConfirmationVisible": root.get("closeConfirmationVisible")
 }, indent=2, ensure_ascii=False))
@@ -490,8 +496,8 @@
 require(report.get("lastCloseTargetKind") == "app", "confirmed App close must record app target")
 require(report.get("lastCloseAppGroupIndex") == 1, "confirmed App close must record target app group")
 require(report.get("lastCloseResult") == "requested", "debug App close service must return requested")
-require(report.get("suppressedCloseTargetCount") == 1, "confirmed App close must expose one suppressed close target")
-require(1 not in [column.get("appGroupIndex") for column in root.get("waterfallColumns", [])], "confirmed App close must optimistically remove the target column")
+require(report.get("suppressedCloseTargetCount") == 0, "requested-but-still-present App close must not suppress the column")
+require(1 in [column.get("appGroupIndex") for column in root.get("waterfallColumns", [])], "requested-but-still-present App close must keep the target column visible")
 require(root.get("closeConfirmationVisible") is False, "confirmed App close must hide confirmation")
 require(root.get("closeFeedbackVisible") is True, "confirmed App close must show failure feedback when target remains")
 require(root.get("closeFeedbackKind") == "failure", "confirmed App close feedback must be failure")
@@ -503,6 +509,8 @@
     "lastCloseTargetKind": report.get("lastCloseTargetKind"),
     "lastCloseResult": report.get("lastCloseResult"),
     "lastDismissReason": report.get("lastDismissReason"),
+    "targetColumnStillVisible": 1 in [column.get("appGroupIndex") for column in root.get("waterfallColumns", [])],
+    "suppressedCloseTargetCount": report.get("suppressedCloseTargetCount"),
     "closeFeedbackKind": root.get("closeFeedbackKind"),
     "closeFeedbackMessage": root.get("closeFeedbackMessage")
 }, indent=2, ensure_ascii=False))

--
Gitblit v1.9.3