You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Every published version of Wolfgang.TryPattern returns 404 for its .snupkg at the NuGet flat-container URL:
$ for v in 0.3.0 0.3.1 0.3.2 0.3.3 0.3.4; do
echo -n "v$v: "
curl -sIo /dev/null -w "%{http_code}\n" \
"https://api.nuget.org/v3-flatcontainer/wolfgang.trypattern/$v/wolfgang.trypattern.$v.snupkg"
done
v0.3.0: 404
v0.3.1: 404
v0.3.2: 404
v0.3.3: 404
v0.3.4: 404
Meanwhile the .nupkg for every version returns 200 as expected.
Impact
F11 debug-step-into does not work for any consumer today. A consumer who installs Wolfgang.TryPattern, sets a breakpoint in their own code that calls the library, and presses F11 will land in "decompiled assembly" rather than the actual source served from GitHub via SourceLink — because their debugger cannot fetch the symbols.
Diagnosis so far
Local dotnet pack is fine. Running the release flow locally against main HEAD produces both artifacts:
The .snupkg's 4 PDBs all pass sourcelink test — SourceLink metadata is embedded correctly and URLs resolve to real GitHub raw content. So the ARTIFACT is fine; the problem is at the publish step.
.snupkg IS captured by the pipeline artifact.release.yaml's pack job uploads ./nuget-packages/ in full (if-no-files-found: warn), and publish-nuget downloads it into ./packages. Both files present in-flight.
The publish step MIGHT be the problem.release.yaml's publish loop:
Per NuGet docs, dotnet nuget push mypackage.nupkg should automatically push an adjacent mypackage.snupkg if it exists in the same directory. Both files ARE in ./packages/ at push time. But empirically the .snupkg either isn't being pushed or isn't being served at the flat-container URL after push.
Candidate root causes (needs investigation)
dotnet nuget push symbol auto-push isn't happening for some reason — maybe the dotnet CLI version on the runner is too old, or the --skip-duplicate flag suppresses the symbol push, or the auto-push requires --symbol-source https://api.nuget.org/v3/index.json (undocumented?).
.snupkg IS being pushed but nuget.org is serving it from a different URL (symbol server) than the flat container, and I'm querying the wrong path.
.snupkg is being rejected during nuget.org's validation pipeline (the Package Symbol Server validates symbols separately and can silently reject).
Compare against a known-good published package with .snupkg symbols to sanity-check the URL pattern is right.
Acceptance criteria
Root cause identified: is dotnet nuget push failing silently to push .snupkg, or is nuget.org silently rejecting it, or is the URL query wrong?
release.yaml fixed so the next release publishes a real .snupkg reachable from consumers.
Verified by #181's SourceLink verification (which today runs against local artifacts) being augmented to also do a post-release fetch from nuget.org.
Fleet-wide check: verify whether other Wolfgang.* libraries have the same gap. If so, fix in repo-template and fan out.
Discovery context
Discovered while implementing #181 (SourceLink verification workflow). Filed as its own issue rather than folded into #181 because the .snupkg-publish gap is publish-side infrastructure, and the SourceLink verification workflow correctly focuses on build-side artifact integrity. Both matter; they're independent.
Symptom
Every published version of
Wolfgang.TryPatternreturns 404 for its.snupkgat the NuGet flat-container URL:Meanwhile the
.nupkgfor every version returns 200 as expected.Impact
F11 debug-step-into does not work for any consumer today. A consumer who installs
Wolfgang.TryPattern, sets a breakpoint in their own code that calls the library, and presses F11 will land in "decompiled assembly" rather than the actual source served from GitHub via SourceLink — because their debugger cannot fetch the symbols.Diagnosis so far
Local
dotnet packis fine. Running the release flow locally against main HEAD produces both artifacts:The .snupkg's 4 PDBs all pass
sourcelink test— SourceLink metadata is embedded correctly and URLs resolve to real GitHub raw content. So the ARTIFACT is fine; the problem is at the publish step.Directory.Build.props is correct:
.snupkgIS captured by the pipeline artifact.release.yaml's pack job uploads./nuget-packages/in full (if-no-files-found: warn), andpublish-nugetdownloads it into./packages. Both files present in-flight.The publish step MIGHT be the problem.
release.yaml's publish loop:Per NuGet docs,
dotnet nuget push mypackage.nupkgshould automatically push an adjacentmypackage.snupkgif it exists in the same directory. Both files ARE in./packages/at push time. But empirically the .snupkg either isn't being pushed or isn't being served at the flat-container URL after push.Candidate root causes (needs investigation)
dotnet nuget pushsymbol auto-push isn't happening for some reason — maybe thedotnetCLI version on the runner is too old, or the--skip-duplicateflag suppresses the symbol push, or the auto-push requires--symbol-source https://api.nuget.org/v3/index.json(undocumented?)..snupkgIS being pushed but nuget.org is serving it from a different URL (symbol server) than the flat container, and I'm querying the wrong path..snupkgis being rejected during nuget.org's validation pipeline (the Package Symbol Server validates symbols separately and can silently reject).Reproduction
Public repro from any shell with
curl:Compare against a known-good published package with .snupkg symbols to sanity-check the URL pattern is right.
Acceptance criteria
dotnet nuget pushfailing silently to push .snupkg, or is nuget.org silently rejecting it, or is the URL query wrong?release.yamlfixed so the next release publishes a real .snupkg reachable from consumers.repo-templateand fan out.Discovery context
Discovered while implementing #181 (SourceLink verification workflow). Filed as its own issue rather than folded into #181 because the .snupkg-publish gap is publish-side infrastructure, and the SourceLink verification workflow correctly focuses on build-side artifact integrity. Both matter; they're independent.