It should be beneficial to reduce bandwidth and speed up page load time. Many dynamic pages will compress well (e.g., from 521 KB to 27.2 KB). This is in large part because inline SVG are often repeated many times. Only do so if the handler hasn't already taken care of compression. This is determined by whether the Content-Encoding header is set by the time WriteHeader is called.
This is a more consistent naming scheme. The detail comes first, the interface name comes last. Similar to limitedWriter, nopCloser, etc.
It's sometimes desirable to see all CLs/PRs for a specific Go package. This change makes that possible via the https://gochanges.org domain.
Previously, the import path was used directly as an issue title prefix. This works for most import paths, but not for golang.org/x/... ones. We need to map those to x/... prefixes. Also simplify code in ParsePrefixedTitle.
Sometimes it's helpful to be able to see a list of all packages (and their number of open issues) at a glance. Since they're all on one page, it's easy to use the browser's search functionality to find a specific package or parent folder. If Accept header is set to exactly "application/json", respond in JSON format.
Some Go packages are not available for all OSes. Doing a normal "go list" only lists packages that match the current GOOS/GOARCH pair (darwin/amd64 in my case). So we run it with different GOOS values to include all packages.