Ariver
2026-06-18 4e9fef02a574f16bb6fe3f7cef4f967e009d2a5d
C3.tools/round1-space-filter-fixture-qa.sh
@@ -251,6 +251,22 @@
        print(json.dumps(report, indent=2, ensure_ascii=False), file=sys.stderr)
        sys.exit(1)
def is_locked_fill(color):
    return (
        color.get("blue", 0) >= 0.85
        and color.get("green", 0) >= 0.55
        and color.get("red", 1) <= 0.58
        and color.get("alpha", 0) >= 0.70
    )
def is_white(color):
    return (
        color.get("red", 0) >= 0.94
        and color.get("green", 0) >= 0.94
        and color.get("blue", 0) >= 0.94
        and color.get("alpha", 0) >= 0.88
    )
root = report.get("rootView", {})
items = root.get("appShelfItems", [])
columns = root.get("waterfallColumns", [])
@@ -287,7 +303,13 @@
require(segment_by_id[4].get("windowCount") == 0, "B1 must remain visible as empty Space")
require(segment_by_id[5].get("windowCount") == 1, "B2 fullscreen Space must remain visible")
require("locked" in segment_by_id[1].get("visualStates", []), "locked Space must expose locked visual state")
require(segment_by_id[1].get("borderWidth", 0) >= 5.5, "locked Space must use a heavy blue border")
require(segment_by_id[1].get("borderWidth", 99) <= 2.0, "locked Space must not use the old heavy border")
require(segment_by_id[1].get("backgroundKind") == "solid", "locked Space must use a solid light-blue fill")
require(is_locked_fill(segment_by_id[1].get("backgroundColor", {})), "locked Space fill must be clean light blue")
require(is_white(segment_by_id[1].get("labelColor", {})), "locked Space label text must be pure white")
require(is_white(segment_by_id[1].get("countColor", {})), "locked Space count text must be pure white")
require(is_white(segment_by_id[1].get("appColor", {})), "locked Space app text must be pure white")
require(all(is_white(color) for color in segment_by_id[1].get("windowBlockColors", [])), "locked Space window blocks must be pure white")
lock_shadow = segment_by_id[1].get("shadowColor", {})
require(lock_shadow.get("red", 0) >= 0.90 and lock_shadow.get("green", 0) >= 0.90 and lock_shadow.get("blue", 0) >= 0.90, "locked Space must use a white glow")
require(segment_by_id[1].get("shadowOpacity", 0) >= 0.60, "locked Space glow must be visibly stronger than hover")
@@ -303,6 +325,9 @@
    "cardWindowIDs": [card.get("windowID") for card in cards],
    "lockedSpace": root.get("spaceFilterLockedSpaceID"),
    "lockedBorderWidth": segment_by_id[1].get("borderWidth"),
    "lockedBackgroundColor": segment_by_id[1].get("backgroundColor"),
    "lockedLabelColor": segment_by_id[1].get("labelColor"),
    "lockedWindowBlockColors": segment_by_id[1].get("windowBlockColors"),
    "lockedShadowOpacity": segment_by_id[1].get("shadowOpacity"),
    "lockedShadowRadius": segment_by_id[1].get("shadowRadius"),
    "waterfallLeftBlankWidth": left_blank_width,
@@ -435,6 +460,22 @@
        print(json.dumps(report, indent=2, ensure_ascii=False), file=sys.stderr)
        sys.exit(1)
def is_locked_fill(color):
    return (
        color.get("blue", 0) >= 0.85
        and color.get("green", 0) >= 0.55
        and color.get("red", 1) <= 0.58
        and color.get("alpha", 0) >= 0.70
    )
def is_white(color):
    return (
        color.get("red", 0) >= 0.94
        and color.get("green", 0) >= 0.94
        and color.get("blue", 0) >= 0.94
        and color.get("alpha", 0) >= 0.88
    )
root = report.get("rootView", {})
segments = root.get("spaceLaneSegments", [])
segment_by_id = {segment.get("spaceID"): segment for segment in segments}
@@ -449,11 +490,15 @@
require(root.get("waterfallColumnCount") == 0, "root Waterfall must be empty")
require(root.get("spaceLaneLabels") == ["A1", "A2", "A3", "B1", "B2"], "Space Lane must stay global while empty Space is locked")
require("locked" in segment_by_id[3].get("visualStates", []), "empty locked Space must expose locked visual state")
require(segment_by_id[3].get("borderWidth", 0) >= 5.5, "empty locked Space must still use a heavy locked border")
require(segment_by_id[3].get("borderWidth", 99) <= 2.0, "empty locked Space must not use the old heavy border")
require(segment_by_id[3].get("backgroundKind") == "solid", "empty locked Space must use the same light-blue fill")
require(is_locked_fill(segment_by_id[3].get("backgroundColor", {})), "empty locked Space fill must be clean light blue")
require(is_white(segment_by_id[3].get("labelColor", {})), "empty locked Space label text must be pure white")
require(is_white(segment_by_id[3].get("countColor", {})), "empty locked Space count text must be pure white")
require(is_white(segment_by_id[3].get("appColor", {})), "empty locked Space app text must be pure white")
empty_shadow = segment_by_id[3].get("shadowColor", {})
require(empty_shadow.get("red", 0) >= 0.90 and empty_shadow.get("green", 0) >= 0.90 and empty_shadow.get("blue", 0) >= 0.90, "empty locked Space must use white glow")
require(segment_by_id[3].get("shadowOpacity", 0) >= 0.60, "empty locked Space glow must be visible")
require(segment_by_id[3].get("backgroundKind") == "clear", "empty locked Space must not use gray/gradient fill")
require(segment_by_id[4].get("backgroundKind") == "clear", "empty sibling Space must not inherit gray/gradient fill")
print(json.dumps({
@@ -461,6 +506,9 @@
    "lockedSpace": report.get("spaceFilterLockedSpaceID"),
    "appCount": report.get("appCount"),
    "columnCount": report.get("columnCount"),
    "a3BorderWidth": segment_by_id[3].get("borderWidth"),
    "a3BackgroundColor": segment_by_id[3].get("backgroundColor"),
    "a3LabelColor": segment_by_id[3].get("labelColor"),
    "a3BackgroundKind": segment_by_id[3].get("backgroundKind"),
    "b1BackgroundKind": segment_by_id[4].get("backgroundKind")
}, indent=2, ensure_ascii=False))