KassaSana
## Summary For 7 matches, **none** of the 360 frames' `event_uuid`s exist in the match's events file, so the 360 data can't be joined to events at all. All 7 were touched by the 2026-05-26 export (b0bc9f22dd77c206ddedc1d742893b3bbe64baec), which updated their `three-sixty/` files but not their `events/` files. | match_id | Match | 360 frames | Frames joining events | Events file last changed | |---|---|---|---|---| | 3895158 | Bundesliga 23/24: Leverkusen v Dortmund | 3,318 | **0** (was 3,312 / 3,312 before b0bc9f22) | 2024-05-21 | | 3895266 | Bundesliga 23/24: Leverkusen v Wolfsburg | 3,615 | **0** (was 3,623 / 3,623) | 2024-05-21 | | 3895309 | Bundesliga 23/24: Dortmund v Leverkusen | 3,280 | **0** (was 3,252 / 3,252) | 2024-05-21 | | 3837706 | Ligue 1 22/23: PSG v Brest | 3,548 | **0** (360 file new in b0bc9f22) | 2023-12-13 | | 3877115 | MLS 2023: Inter Miami v Toronto | 3,808 | **0** (new in b0bc9f22) | 2023-12-13 | | 3877170 | MLS 2023: Inter Miami v Cincinnati | 3,097 | **0** (new in b0bc9f22) | 2023-12-13 | | 3877194 | MLS 2023: Charlotte v Inter Miami | 3,174 | **0** (new in b0bc9f22) | 2023-12-13 | In `matches/`, each of these has a `last_updated` (2024-01 to 2024-09) that is later than the last commit to its events file. It looks like the events were regenerated upstream with new event IDs, and the 2026-05-26 export shipped 360 frames built against the new IDs without the matching events files. ## Reproduce ```python import requests base = "https://raw.githubusercontent.com/hudl/open-data/master/data" for mid in [3895158, 3895266, 3895309, 3837706, 3877115, 3877170, 3877194]: ids = {e["id"] for e in requests.get(f"{base}/events/{mid}.json").json()} frames = requests.get(f"{base}/three-sixty/{mid}.json").json() print(mid, len(frames), sum(f["event_uuid"] in ids for f in frames)) # 2nd number is 0 for all ``` ## Scope I checked all 426 `three-sixty` files. Apart from these 7 (and the corrupt `3845506.json`, see #50), every frame's `event_uuid` exists in its events file. ## Possible fixes - **Best:** publish the updated `events/` (and probably `lineups/`) files for these 7 matches, so they match the 360 data that's already there. - **Stopgap for the 3 Bundesliga matches:** revert their `three-sixty/` files to the pre-b0bc9f22 versions, which join fully to the current events. That doesn't help the 4 new files, which have no earlier version. I'm happy to open a PR for this if it's useful. Related: #59 (same export dropped 272 matches from the Bundesliga 2015/16 index).