Ariver
2026-06-19 cb67d8b2fa9b9c9d30cd81d72b8737ee2baa44b6
C1.source/Sources/AlignerCore/Windows/FinderTabSpaceAttributionPolicy.swift
@@ -4,6 +4,7 @@
public enum FinderTabSpaceAttributionPolicy {
    private static let finderBundleIdentifier = "com.apple.finder"
    private static let minimumOverlapRatio: CGFloat = 0.85
    private static let minimumSizeSimilarityRatio: CGFloat = 0.80
    private static let minimumBestScoreGap: CGFloat = 0.05
    public static func attributedRecords(_ records: [WindowEnumerationRecord]) -> [WindowEnumerationRecord] {
@@ -52,8 +53,7 @@
            sameProcess(candidate, host)
        }
        let scoredHosts = compatibleHosts.compactMap { host -> (record: WindowEnumerationRecord, score: CGFloat)? in
            guard let score = overlapScore(candidate.frame, host.frame),
                  score >= minimumOverlapRatio
            guard let score = frameCompatibilityScore(candidate.frame, host.frame)
            else {
                return nil
            }
@@ -79,6 +79,18 @@
        let secondBest = scoredHosts[1]
        return best.score - secondBest.score >= minimumBestScoreGap ? best.record : nil
    }
    private static func frameCompatibilityScore(_ lhs: CGRect?, _ rhs: CGRect?) -> CGFloat? {
        guard let overlap = overlapScore(lhs, rhs),
              overlap >= minimumOverlapRatio,
              let sizeSimilarity = sizeSimilarityScore(lhs, rhs),
              sizeSimilarity >= minimumSizeSimilarityRatio
        else {
            return nil
        }
        return min(overlap, sizeSimilarity)
    }
    private static func sameProcess(
@@ -115,6 +127,22 @@
        return (intersection.width * intersection.height) / denominator
    }
    private static func sizeSimilarityScore(_ lhs: CGRect?, _ rhs: CGRect?) -> CGFloat? {
        guard let lhs,
              let rhs,
              lhs.width > 0,
              lhs.height > 0,
              rhs.width > 0,
              rhs.height > 0
        else {
            return nil
        }
        let widthSimilarity = min(lhs.width, rhs.width) / max(lhs.width, rhs.width)
        let heightSimilarity = min(lhs.height, rhs.height) / max(lhs.height, rhs.height)
        return min(widthSimilarity, heightSimilarity)
    }
    private static func copy(
        _ record: WindowEnumerationRecord,
        isFullscreen: Bool,