Summary
Upstream GAMDL (main branch) is one commit ahead of the most recent tag 3.7.3 as of 2026-06-07. The single in-flight commit is a pure HTTP-layer fix that rewrites Apple Music's m3u8 master URLs from codec-specific variants to the _default variant.
This issue is the pre-emptive watch: get the audit done, confirm zero MeedyaDL surface change, pre-stage the support-window bump, and pre-write the per-workflow release-notes line so the moment upstream tags (probably 3.7.4) we can ship a follow-up MeedyaDL pre-release on the alpha channel with one-line PR.
In-flight commit
a9e75384 — "Add method to switch m3u8 master URL to default and update playback handling" — touches gamdl/interface/song.py only (1 file, +27/-10).
What the change does
Adds _switch_m3u8_master_url_to_default():
def _switch_m3u8_master_url_to_default(self, m3u8_master_url: str) -> str:
return re.sub(
r"(P\d+)_[^/]+(\.m3u8)",
r"\1_default\2",
m3u8_master_url,
)
The regex matches Apple's CDN m3u8 master URL pattern and rewrites the codec-specific middle segment to default. Examples:
- Input:
https://…/P12345_aac_HE_4_44100.m3u8
- Output:
https://…/P12345_default.m3u8
Applied at both extraction sites in song.py:
_get_m3u8_from_playback() — when the URL comes from playback.songList[0].hls-playlist-url
_get_m3u8_master_url_from_metadata() — when the URL comes from song_metadata.attributes.extendedAssetUrls.enhancedHls
Pattern is identical to the user-facing fix in v3.5.2 (play-edge.itunes.apple.com → play.itunes.apple.com host migration) and v3.5.1 (m3u8 403 error fix) — Apple silently shifts what URL shapes work, and GAMDL adapts.
Why MeedyaDL surface is unaffected
Audit-grep run 2026-06-07:
| Surface |
Hit count |
Verdict |
| MeedyaDL parses m3u8 URL shape (`rg 'm3u8 |
hls-playlist |
enhancedHls'`) |
MeedyaDL regex matching P\d+_* pattern |
0 |
No collision |
| MeedyaDL emits CLI flags affected by this change |
0 |
This is pure HTTP-layer internal |
MeedyaDL stdout/stderr parsing affected (process::classify_error, TRACK_INFO_V2_REGEX, ERROR_PREFIX_REGEX) |
0 |
The new log.debug calls are gated behind --log-level DEBUG which MeedyaDL never sets |
Confirmed: this matches the same zero-code-change admission shape as v3.3 (playlist fix) / v3.5 (iTunes lookup fix) / v3.5.1 (MV 403 fix) / v3.5.2 (host migration) / v3.5.x and v3.7.1 trailing audits.
Plan
Tracked as a 4-step pre-release prep (all read-only / non-blocking on upstream):
Anticipated next-tag work (when upstream tags)
Exactly two file edits (target: single-commit PR):
src-tauri/tool-versions.toml — bump maximum_tested_version + recommended_version from 3.7.3 to whatever upstream lands (almost certainly 3.7.4). Append audit-notes block.
.claude/CLAUDE.md — extend the GAMDL cadence paragraph with one entry summarising the m3u8 rewrite + zero-surface admission, in the same prose style as the existing 3.5.2 / 3.7.2+3.7.3 entries.
No GamdlFeature gate needed. No regex changes. No classifier changes. No new CLI flags or INI keys.
Trigger
Close this issue when upstream tags the release and MeedyaDL ships the admission PR.
Related
Summary
Upstream GAMDL (
mainbranch) is one commit ahead of the most recent tag3.7.3as of 2026-06-07. The single in-flight commit is a pure HTTP-layer fix that rewrites Apple Music's m3u8 master URLs from codec-specific variants to the_defaultvariant.This issue is the pre-emptive watch: get the audit done, confirm zero MeedyaDL surface change, pre-stage the support-window bump, and pre-write the per-workflow release-notes line so the moment upstream tags (probably
3.7.4) we can ship a follow-up MeedyaDL pre-release on the alpha channel with one-line PR.In-flight commit
a9e75384— "Add method to switch m3u8 master URL to default and update playback handling" — touchesgamdl/interface/song.pyonly (1 file, +27/-10).What the change does
Adds
_switch_m3u8_master_url_to_default():The regex matches Apple's CDN m3u8 master URL pattern and rewrites the codec-specific middle segment to
default. Examples:https://…/P12345_aac_HE_4_44100.m3u8https://…/P12345_default.m3u8Applied at both extraction sites in
song.py:_get_m3u8_from_playback()— when the URL comes fromplayback.songList[0].hls-playlist-url_get_m3u8_master_url_from_metadata()— when the URL comes fromsong_metadata.attributes.extendedAssetUrls.enhancedHlsPattern is identical to the user-facing fix in v3.5.2 (
play-edge.itunes.apple.com→play.itunes.apple.comhost migration) and v3.5.1 (m3u8 403 error fix) — Apple silently shifts what URL shapes work, and GAMDL adapts.Why MeedyaDL surface is unaffected
Audit-grep run 2026-06-07:
P\d+_*patternprocess::classify_error,TRACK_INFO_V2_REGEX,ERROR_PREFIX_REGEX)log.debugcalls are gated behind--log-level DEBUGwhich MeedyaDL never setsConfirmed: this matches the same zero-code-change admission shape as v3.3 (playlist fix) / v3.5 (iTunes lookup fix) / v3.5.1 (MV 403 fix) / v3.5.2 (host migration) / v3.5.x and v3.7.1 trailing audits.
Plan
Tracked as a 4-step pre-release prep (all read-only / non-blocking on upstream):
.github/audits/gamdl-vNEXT-audit.mdwith the analysis. Once upstream tags, rename file + fill in the tag.tool-versions.tomlbump. Comment block + audit note ready for the version-ceiling flip..github/release-notes/v1.10.0-alpha.NN.md(or whichever pre-release lands first after the upstream tag) so it's drop-in ready.Anticipated next-tag work (when upstream tags)
Exactly two file edits (target: single-commit PR):
src-tauri/tool-versions.toml— bumpmaximum_tested_version+recommended_versionfrom3.7.3to whatever upstream lands (almost certainly3.7.4). Append audit-notes block..claude/CLAUDE.md— extend the GAMDL cadence paragraph with one entry summarising the m3u8 rewrite + zero-surface admission, in the same prose style as the existing 3.5.2 / 3.7.2+3.7.3 entries.No
GamdlFeaturegate needed. No regex changes. No classifier changes. No new CLI flags or INI keys.Trigger
Close this issue when upstream tags the release and MeedyaDL ships the admission PR.
Related
.github/audits/gamdl-v3.5.2-audit.md,.github/audits/gamdl-v3.7.2-v3.7.3-audit.md