)]}'
{
  "commit": "ef00a2bc79a56bdd9cb2ac27ab3d42662f82deea",
  "tree": "96dff518bd5421e5427331089cd5aa9614048c92",
  "parents": [
    "f5ad6e77a2dbae7d3b70f31fbbf712fec767fa63"
  ],
  "author": {
    "name": "Ahmad Saleem",
    "email": "ahmad.saleem792+github@gmail.com",
    "time": "Fri May 08 17:12:51 2026"
  },
  "committer": {
    "name": "Ahmad Saleem",
    "email": "ahmad.saleem792@gmail.com",
    "time": "Fri May 08 17:12:51 2026"
  },
  "message": "sibling-index() in @keyframes doesn\u0027t re-resolve when siblings change\nhttps://bugs.webkit.org/show_bug.cgi?id\u003d314376\nrdar://176531901\n\nReviewed by Antoine Quint.\n\nWhen a keyframe value uses sibling-index() or sibling-count(), the\nresolved keyframe style is frozen at the value computed at animation\nstart. Adding or removing a preceding sibling correctly invalidates\nthe target\u0027s style (via ChildrenAffectedBy{Forward,Backward}PositionalRules),\nbut KeyframeEffect::recomputeKeyframesIfNecessary() had no signal to\nre-run styleForKeyframe, so the blended keyframe kept the stale index.\n\nTrack tree-counting usage on the keyframe style and recompute keyframes\nwhen it is set, mirroring the existing handling of usesAnchorFunctions.\n\n* Source/WebCore/animation/BlendingKeyframes.cpp:\n(WebCore::BlendingKeyframes::usesTreeCountingFunctions const):\n* Source/WebCore/animation/BlendingKeyframes.h:\n* Source/WebCore/animation/KeyframeEffect.cpp:\n(WebCore::KeyframeEffect::recomputeKeyframesIfNecessary): Recompute\nblending keyframes when they reference tree-counting functions, so the\ntarget\u0027s style invalidation on sibling change propagates through to the\nanimated value.\n\n\u003e Progressions:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-style-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-variation-settings-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-weight-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-length-value-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-rotate-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-scale-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-transform-dynamic-expected.txt:\n* LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-value-dynamic-expected.txt:\n\nCanonical link: https://commits.webkit.org/312895@main\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ab13c38dffbac91aa5b02f201783a848d95f40e8",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-style-dynamic-expected.txt",
      "new_id": "1842ee994ac816b7a8e1439c0cbced6e2077363d",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-style-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "b94490f1d7d969b5771afff1b595de22720ff8d4",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-variation-settings-dynamic-expected.txt",
      "new_id": "1842ee994ac816b7a8e1439c0cbced6e2077363d",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-variation-settings-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "86d423f19fa1519f34f5080e37a9514c2d7b9b90",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-weight-dynamic-expected.txt",
      "new_id": "1842ee994ac816b7a8e1439c0cbced6e2077363d",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-font-weight-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "cef9c2dcdf925a4f95e458e657c1283193ca1dce",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-length-value-dynamic-expected.txt",
      "new_id": "16c16d8dc60355f584ed6938b83a6a0977b5c88d",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-length-value-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "a791efc094737b7a92a0fc9ba4c9685b26ecdab5",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic-expected.txt",
      "new_id": "0597b51dc622f3466292320e62ba84f577a080c8",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-registered-properties-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "2f1a0d9be92d9331283dc6b935fbf71898e58719",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-rotate-dynamic-expected.txt",
      "new_id": "1842ee994ac816b7a8e1439c0cbced6e2077363d",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-rotate-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "5e052abb01b411aa9b47f7b3f129c70b8d7d3dae",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-scale-dynamic-expected.txt",
      "new_id": "1842ee994ac816b7a8e1439c0cbced6e2077363d",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-scale-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "57938c65171b9b71f4a0c2b83d0b2f3330e17e57",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-transform-dynamic-expected.txt",
      "new_id": "1842ee994ac816b7a8e1439c0cbced6e2077363d",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-transform-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "0f70cb8baedf2d210ce1dc4be5ca78e00716270c",
      "old_mode": 33188,
      "old_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-value-dynamic-expected.txt",
      "new_id": "58cc56858376e410b2bff55cce6196d25df499d6",
      "new_mode": 33188,
      "new_path": "LayoutTests/imported/w3c/web-platform-tests/css/css-values/tree-counting/sibling-index-keyframe-value-dynamic-expected.txt"
    },
    {
      "type": "modify",
      "old_id": "636d77ef3d2fb68add25acaaa5bc778119a12c47",
      "old_mode": 33188,
      "old_path": "Source/WebCore/animation/BlendingKeyframes.cpp",
      "new_id": "0b6de925124d6389fec94a9d01853d5c829e7db7",
      "new_mode": 33188,
      "new_path": "Source/WebCore/animation/BlendingKeyframes.cpp"
    },
    {
      "type": "modify",
      "old_id": "7368e5b35fa071655f1c37a87b5f9e68412b776d",
      "old_mode": 33188,
      "old_path": "Source/WebCore/animation/BlendingKeyframes.h",
      "new_id": "b0ec0329ff13cb0bc114c7e0a85f4ada67f4df0e",
      "new_mode": 33188,
      "new_path": "Source/WebCore/animation/BlendingKeyframes.h"
    },
    {
      "type": "modify",
      "old_id": "59657bfad81febd021714f3d11d2e22fed8d5c8d",
      "old_mode": 33188,
      "old_path": "Source/WebCore/animation/KeyframeEffect.cpp",
      "new_id": "189e41bae500d01d9fd0abdc4758a631bb93fceb",
      "new_mode": 33188,
      "new_path": "Source/WebCore/animation/KeyframeEffect.cpp"
    }
  ]
}
