Inherited Netflix tags (removed 2026-10-05)¶
VMAFx/vmafx was created from a copy of Netflix/vmaf and carried 26 of its release tags. ADR-1805 deleted them from VMAFx/vmafx on 2026-10-05, after the maintainer decided so. The commits stay in history and Netflix/vmaf keeps its own tags. This page records what was removed and how to recreate a tag. The machine-readable copy is scripts/release/inherited-upstream-tags.json; the push guard and the tests read it.
Why¶
go get github.com/VMAFx/vmafx@latestresolved to Netflix'sv3.0.0+incompatible, a tree withoutgo.mod.- Netflix's
v1.5.3outranked every forkv1.0.xrelease, so aretractin the fork'sgo.modnever took effect. - The fork's own stream (
v1.0.2,v1.1.x, ...) would collide with the existing names: a GitHub release forv1.0.2attaches to the commit of the tag that already exists.
Details and the measured Go behaviour: Release guide, Go consumers.
What was removed¶
A tag was deleted only when Netflix/vmaf defined a tag of the same name pointing at the same object. All 26 are lightweight tags (object id equals commit id). No GitHub release object was attached to any of them; the five releases of the repository are v1.0.0-rc.1, v1.0.0-rc.2 and three tester-* pre-releases.
| Tag | Object | Commit | Netflix object |
|---|---|---|---|
v1.0.2 | 2c06ddf5fd8903d631a1275e5fb2169bcbbc7212 | 2c06ddf5fd8903d631a1275e5fb2169bcbbc7212 | 2c06ddf5fd8903d631a1275e5fb2169bcbbc7212 |
v1.1.6 | d13611cd859ba267ca0e6f36cb19e55483fc04b2 | d13611cd859ba267ca0e6f36cb19e55483fc04b2 | d13611cd859ba267ca0e6f36cb19e55483fc04b2 |
v1.2.0 | 6657d1753c5774427d0a584f1265d54d9dc0b7ff | 6657d1753c5774427d0a584f1265d54d9dc0b7ff | 6657d1753c5774427d0a584f1265d54d9dc0b7ff |
v1.3.1 | 49c2efb1f750c30fe5fd338a0a19f9973d7dc255 | 49c2efb1f750c30fe5fd338a0a19f9973d7dc255 | 49c2efb1f750c30fe5fd338a0a19f9973d7dc255 |
v1.3.4 | f1225dc5366c4bd0ed2a315e4a21c88e42a4fc1e | f1225dc5366c4bd0ed2a315e4a21c88e42a4fc1e | f1225dc5366c4bd0ed2a315e4a21c88e42a4fc1e |
v1.3.5 | a6957a081a4bdb6643662f3172edbaa22394919b | a6957a081a4bdb6643662f3172edbaa22394919b | a6957a081a4bdb6643662f3172edbaa22394919b |
v1.3.6rc | 3b517cd18d4fd6544fcd52e0fa70d5ef8a0a0a02 | 3b517cd18d4fd6544fcd52e0fa70d5ef8a0a0a02 | 3b517cd18d4fd6544fcd52e0fa70d5ef8a0a0a02 |
v1.3.7 | 9605229b4515064eca25526a149f7a704d2c3eeb | 9605229b4515064eca25526a149f7a704d2c3eeb | 9605229b4515064eca25526a149f7a704d2c3eeb |
v1.3.7rc | 1b0f6efb832b0575ca1a852aa3cb29330f43ae97 | 1b0f6efb832b0575ca1a852aa3cb29330f43ae97 | 1b0f6efb832b0575ca1a852aa3cb29330f43ae97 |
v1.3.9 | 1b1d75db6bf44b62e9755121559c951c03199b2c | 1b1d75db6bf44b62e9755121559c951c03199b2c | 1b1d75db6bf44b62e9755121559c951c03199b2c |
v1.3.12 | a1cb186ff5930bf02406fa01f52e2f7e30b823df | a1cb186ff5930bf02406fa01f52e2f7e30b823df | a1cb186ff5930bf02406fa01f52e2f7e30b823df |
v1.3.13 | fbb9d3ecda8cc2bd80ecbdd63f877825216045be | fbb9d3ecda8cc2bd80ecbdd63f877825216045be | fbb9d3ecda8cc2bd80ecbdd63f877825216045be |
v1.3.14 | fcf8c9e695b16f9f3b43af9a4a0c3fb792fc071a | fcf8c9e695b16f9f3b43af9a4a0c3fb792fc071a | fcf8c9e695b16f9f3b43af9a4a0c3fb792fc071a |
v1.3.15 | e434247f8bf8f5ec36ba87062656583c073394fd | e434247f8bf8f5ec36ba87062656583c073394fd | e434247f8bf8f5ec36ba87062656583c073394fd |
v1.5.1 | 35c6044d8483a3ab9528f1cc81f75738efe4f4c0 | 35c6044d8483a3ab9528f1cc81f75738efe4f4c0 | 35c6044d8483a3ab9528f1cc81f75738efe4f4c0 |
v1.5.2 | 19e02b9315d8f30366a70b2cc24f022ad6f64bae | 19e02b9315d8f30366a70b2cc24f022ad6f64bae | 19e02b9315d8f30366a70b2cc24f022ad6f64bae |
v1.5.3 | 47950a6a74b3aa8c483caf3f1cdbfeda7d176086 | 47950a6a74b3aa8c483caf3f1cdbfeda7d176086 | 47950a6a74b3aa8c483caf3f1cdbfeda7d176086 |
v2.0.0 | 9db0c56ce6d4019456a84828f9ed8d8d9da0ff09 | 9db0c56ce6d4019456a84828f9ed8d8d9da0ff09 | 9db0c56ce6d4019456a84828f9ed8d8d9da0ff09 |
v2.1.0 | 2e1b24d8344c8e8dbb770699ac5beae8b11463d4 | 2e1b24d8344c8e8dbb770699ac5beae8b11463d4 | 2e1b24d8344c8e8dbb770699ac5beae8b11463d4 |
v2.1.1 | 8ba4a4b84beb40f97fa01d902e45dde69b18b517 | 8ba4a4b84beb40f97fa01d902e45dde69b18b517 | 8ba4a4b84beb40f97fa01d902e45dde69b18b517 |
v2.2.0 | 0511e05320d67238cf514104566b9d3f969963b7 | 0511e05320d67238cf514104566b9d3f969963b7 | 0511e05320d67238cf514104566b9d3f969963b7 |
v2.2.1 | 9451ff498402e8f0a912161e5f8dea4de6b54ae2 | 9451ff498402e8f0a912161e5f8dea4de6b54ae2 | 9451ff498402e8f0a912161e5f8dea4de6b54ae2 |
v2.3.0 | 5c1c9bfaad599796921b59873e9c3ed74a29c6ff | 5c1c9bfaad599796921b59873e9c3ed74a29c6ff | 5c1c9bfaad599796921b59873e9c3ed74a29c6ff |
v2.3.1 | f2661673a078718ddfc1ddb6042048c1b1284946 | f2661673a078718ddfc1ddb6042048c1b1284946 | f2661673a078718ddfc1ddb6042048c1b1284946 |
v3.0.0 | 17a67b238ce0539bdeafdc95961abac64fa16ea8 | 17a67b238ce0539bdeafdc95961abac64fa16ea8 | 17a67b238ce0539bdeafdc95961abac64fa16ea8 |
v3.0.0-rc | 9ae6f905ead677e11156550df99e17e222d014f5 | 9ae6f905ead677e11156550df99e17e222d014f5 | 9ae6f905ead677e11156550df99e17e222d014f5 |
What stayed¶
Fork tags: v1.0.0-rc.1, v1.0.0-rc.2, tester-20261004-4d3792b3, tester-20261004-860050c3, tester-windows-20261004-2889f963, archive/eupl-relicense-v1 and tiny-blobs-v1.
Netflix tags that were never on origin (a local clone with the upstream remote fetched with tags holds them; do not push them):
| Tag | Object |
|---|---|
v3.1.0 | 6375a4be62fd2673bba2c356b26867d8af01a685 |
v3.2.0 | 3f9e02af258a5c0e30124fc585a3c3af90126dee |
v3.2.1 | f85a853692a8c730d0270cd733c8bb30b5b93b7c |
Recreate a tag¶
The push guard (below) refuses this push by design. Restoring a Netflix tag is a deliberate act that brings back the Go @latest defect above; do it only from a clone without the hook and say why in the PR.
Keeping them out¶
scripts/git-hooks/check-push-tags.pyruns in the lefthookpre-pushstage. It refuses a pushed tag that equals a Netflix tag in the JSON list, and a tag whose name matches none of the fork's patterns (vX.Y.Z[-rc.N],tester-[windows-]<date>-<sha8>,archive/<topic>,tiny-blobs-vN).git config remote.upstream.tagOpt --no-tagsstopsgit fetch upstreamfrom importing Netflix tags into a clone; see Upstream parallel.python3 scripts/release/delete-inherited-upstream-tags.py(dry run; with--applyit deletes) re-checksoriginagainst Netflix's current tags and refuses a tag whose object differs.