internal/history: split Release summary into bug and security fixes

Make it possible to use the higher-level fix summary fields, instead of
CustomSummary, when a release has both bug fixes and security fixes.

Rewrite the recent hand-written custom summaries to use the new fields,
which produces equivalent output that differs largely in white-space
and some trivial consistency fixes.

Fixes golang/go#51719.
Updates golang/go#38488.
Updates golang/go#44918.

Change-Id: I672cea21f63cb4ab9764efb6cbc783cf503b791c
Reviewed-on: https://go-review.googlesource.com/c/website/+/393357
Trust: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Carlos Amedee <amedee@google.com>
diff --git a/_content/doc/devel/release.html b/_content/doc/devel/release.html
index 499de9d..6e5b056 100644
--- a/_content/doc/devel/release.html
+++ b/_content/doc/devel/release.html
@@ -43,10 +43,20 @@
 			{{.}}
 		{{else}}
 			{{if .Future}}will include{{else}}includes{{end}}
-			{{.Quantifier}}
-			{{if .Security}}security{{end}}
-			{{if eq .Quantifier "a"}}fix{{else}}fixes{{end -}}
-			{{with .ComponentsAndPackages}} to {{.}}{{end}}.
+			{{with .Security}}
+				{{.Quantifier}}
+				security
+				{{if eq .Quantifier "a"}}fix{{else}}fixes{{end -}}
+				{{with .ComponentsAndPackages}} to {{.}}{{end -}}
+			{{end}}
+			{{- if and .Security .Bug}}, as well as{{end -}}
+			{{if .Bug}}
+				{{.Bug.Quantifier}}
+				{{if .Security}}bug{{end}} {{/* If there are security fixes too, specify that what follows are bug fixes. */}}
+				{{if eq .Bug.Quantifier "a"}}fix{{else}}fixes{{end -}}
+				{{with .Bug.ComponentsAndPackages}} to {{.}}{{end -}}
+			{{end}}
+			{{- if or .Security .Bug}}.{{end}}
 			{{.More}}
 
 			{{if not .Future}}
diff --git a/cmd/golangorg/testdata/release.txt b/cmd/golangorg/testdata/release.txt
index fd066b4..55c9c20 100644
--- a/cmd/golangorg/testdata/release.txt
+++ b/cmd/golangorg/testdata/release.txt
@@ -10,25 +10,39 @@
 	<p>
 	go1.17.1
 	(released 2021-09-09)
-	includes a security fix to the <code>archive/zip</code> package,
-	as well as bug fixes to the compiler, linker, the <code>go</code> command, and to the <code>crypto/rand</code>, <code>embed</code>, <code>go/types</code>, <code>html/template</code>, and <code>net/http</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.1+label%3ACherryPickApproved">Go
-	1.17.1 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>archive/zip</code> package, as well as
+	bug
+	fixes to the compiler, linker, the <code>go</code> command, and the <code>crypto/rand</code>, <code>embed</code>, <code>go/types</code>, <code>html/template</code>, and <code>net/http</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.1+label%3ACherryPickApproved">Go 1.17.1 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.17.2
 	(released 2021-10-07)
-	includes a security fix to the linker and <code>misc/wasm</code> directory,
-	as well as bug fixes to the compiler, the runtime, the <code>go</code> command, and to the <code>time</code> and <code>text/template</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.2+label%3ACherryPickApproved">Go
-	1.17.2 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to linker and the <code>misc/wasm</code> directory, as well as
+	bug
+	fixes to the compiler, runtime, the <code>go</code> command, and the <code>text/template</code> and <code>time</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.2+label%3ACherryPickApproved">Go 1.17.2 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.17.3
 	(released 2021-11-04)
-	includes security fixes to the <code>archive/zip</code> and <code>debug/macho</code> packages,
-	as well as bug fixes to the compiler, linker, runtime, the <code>go</code> command, the <code>misc/wasm</code> directory, and to the <code>net/http</code> and <code>syscall</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.3+label%3ACherryPickApproved">Go 1.17.3 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to the <code>archive/zip</code> and <code>debug/macho</code> packages, as well as
+	bug
+	fixes to the compiler, linker, runtime, the <code>go</code> command, the <code>misc/wasm</code> directory, and the <code>net/http</code> and <code>syscall</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.3+label%3ACherryPickApproved">Go 1.17.3 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.17.4
@@ -42,8 +56,12 @@
 	<p>
 	go1.17.5
 	(released 2021-12-09)
-	includes security fixes to the <code>syscall</code> and <code>net/http</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.5+label%3ACherryPickApproved">Go 1.17.5 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to the <code>net/http</code> and <code>syscall</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.5+label%3ACherryPickApproved">Go 1.17.5 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.17.6
@@ -57,14 +75,27 @@
 	<p>
 	go1.17.7
 	(released 2022-02-10)
-	includes security fixes to the <code>crypto/elliptic</code>, <code>math/big</code> packages and to the <code>go</code> command, as well as bug fixes to the compiler, linker, runtime, the <code>go</code> command, and the <code>debug/macho</code>, <code>debug/pe</code>, and <code>net/http/httptest</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.7+label%3ACherryPickApproved">Go 1.17.7 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to the <code>go</code> command, and the <code>crypto/elliptic</code> and <code>math/big</code> packages, as well as
+	bug
+	fixes to the compiler, linker, runtime, the <code>go</code> command, and the <code>debug/macho</code>, <code>debug/pe</code>, and <code>net/http/httptest</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.7+label%3ACherryPickApproved">Go 1.17.7 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.17.8
 	(released 2022-03-03)
-	includes a security fix to the <code>regexp/syntax</code> package, as well as bug fixes to the compiler, runtime, the <code>go</code> command, and the <code>crypto/x509</code>, and <code>net</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.8+label%3ACherryPickApproved">Go 1.17.8 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>regexp/syntax</code> package, as well as
+	bug
+	fixes to the compiler, runtime, the <code>go</code> command, and the <code>crypto/x509</code> and <code>net</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.8+label%3ACherryPickApproved">Go 1.17.8 milestone</a>
+	on our issue tracker for details.
 	</p>
 trimbody contains
 	<h2 id="go1.16">go1.16 (released 2021-02-16)</h2>
@@ -104,63 +135,90 @@
 	<p>
 	go1.16.4
 	(released 2021-05-06)
-	includes a security fix to the
-	<code>net/http</code> package, as well as bug fixes to the runtime,
-	the compiler, and the <code>archive/zip</code>, <code>time</code>,
-	and <code>syscall</code> packages. See the
-	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.4+label%3ACherryPickApproved">Go
-	1.16.4 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>net/http</code> package, as well as
+	bug
+	fixes to the compiler, runtime, and the <code>archive/zip</code>, <code>syscall</code>, and <code>time</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.4+label%3ACherryPickApproved">Go 1.16.4 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.5
 	(released 2021-06-03)
-	includes security fixes to the
-	<code>archive/zip</code>, <code>math/big</code>,
-	<code>net</code>, and <code>net/http/httputil</code> packages,
-	as well as bug fixes to the linker, the <code>go</code> command,
-	and the <code>net/http</code> package. See the
-	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.5+label%3ACherryPickApproved">Go
-	1.16.5 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to the <code>archive/zip</code>, <code>math/big</code>, <code>net</code>, and <code>net/http/httputil</code> packages, as well as
+	bug
+	fixes to the linker, the <code>go</code> command, and the <code>net/http</code> package.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.5+label%3ACherryPickApproved">Go 1.16.5 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.6
 	(released 2021-07-12)
-	includes a security fix to the <code>crypto/tls</code> package,
-	as well as bug fixes to the compiler, and the <code>net</code> and <code>net/http</code> packages. See the
-	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.6+label%3ACherryPickApproved">Go
-	1.16.6 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>crypto/tls</code> package, as well as
+	bug
+	fixes to the compiler, and the <code>net</code> and <code>net/http</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.6+label%3ACherryPickApproved">Go 1.16.6 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.7
 	(released 2021-08-05)
-	includes a security fix to the <code>net/http/httputil</code> package,
-	as well as bug fixes to the compiler, the linker, the runtime, the <code>go</code> command,
-	and the <code>net/http</code> package. See the
-	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.7+label%3ACherryPickApproved">Go
-	1.16.7 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>net/http/httputil</code> package, as well as
+	bug
+	fixes to the compiler, linker, runtime, the <code>go</code> command, and the <code>net/http</code> package.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.7+label%3ACherryPickApproved">Go 1.16.7 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.8
 	(released 2021-09-09)
-	includes a security fix to the <code>archive/zip</code> package,
-	as well as bug fixes to the <code>archive/zip</code>, <code>go/internal/gccgoimporter</code>, <code>html/template</code>, <code>net/http</code>, and <code>runtime/pprof</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.8+label%3ACherryPickApproved">Go
-	1.16.8 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>archive/zip</code> package, as well as
+	bug
+	fixes to the <code>archive/zip, go/internal/gccgoimporter</code>, <code>html/template</code>, <code>net/http</code>, and <code>runtime/pprof</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.8+label%3ACherryPickApproved">Go 1.16.8 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.9
 	(released 2021-10-07)
-	includes a security fix to the linker and <code>misc/wasm</code> directory,
-	as well as bug fixes to the runtime and to the <code>text/template</code> package.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.9+label%3ACherryPickApproved">Go
-	1.16.9 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to linker and the <code>misc/wasm</code> directory, as well as
+	bug
+	fixes to runtime and the <code>text/template</code> package.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.9+label%3ACherryPickApproved">Go 1.16.9 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.10
 	(released 2021-11-04)
-	includes security fixes to the <code>archive/zip</code> and <code>debug/macho</code> packages,
-	as well as bug fixes to the compiler, linker, runtime, the <code>misc/wasm</code> directory, and to the <code>net/http</code> package.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.10+label%3ACherryPickApproved">Go 1.16.10 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to the <code>archive/zip</code> and <code>debug/macho</code> packages, as well as
+	bug
+	fixes to the compiler, linker, runtime, the <code>misc/wasm</code> directory, and the <code>net/http</code> package.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.10+label%3ACherryPickApproved">Go 1.16.10 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.11
@@ -174,8 +232,12 @@
 	<p>
 	go1.16.12
 	(released 2021-12-09)
-	includes security fixes to the <code>syscall</code> and <code>net/http</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.12+label%3ACherryPickApproved">Go 1.16.12 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to the <code>net/http</code> and <code>syscall</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.12+label%3ACherryPickApproved">Go 1.16.12 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.13
@@ -189,14 +251,27 @@
 	<p>
 	go1.16.14
 	(released 2022-02-10)
-	includes security fixes to the <code>crypto/elliptic</code>, <code>math/big</code> packages and to the <code>go</code> command, as well as bug fixes to the compiler, linker, runtime, the <code>go</code> command, and the <code>debug/macho</code>, <code>debug/pe</code>, <code>net/http/httptest</code>, and <code>testing</code> packages.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.14+label%3ACherryPickApproved">Go 1.16.14 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to the <code>go</code> command, and the <code>crypto/elliptic</code> and <code>math/big</code> packages, as well as
+	bug
+	fixes to the compiler, linker, runtime, the <code>go</code> command, and the <code>debug/macho</code>, <code>debug/pe</code>, <code>net/http/httptest</code>, and <code>testing</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.14+label%3ACherryPickApproved">Go 1.16.14 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.16.15
 	(released 2022-03-03)
-	includes a security fix to the <code>regexp/syntax</code> package, as well as bug fixes to the compiler, runtime, the <code>go</code> command, and to the <code>net</code> package.
-	See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.15+label%3ACherryPickApproved">Go 1.16.15 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>regexp/syntax</code> package, as well as
+	bug
+	fixes to the compiler, runtime, the <code>go</code> command, and the <code>net</code> package.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.15+label%3ACherryPickApproved">Go 1.16.15 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<h2 id="go1.15">go1.15 (released 2020-08-11)</h2>
 	<p>
@@ -310,40 +385,53 @@
 	<p>
 	go1.15.12
 	(released 2021-05-06)
-	includes a security fix to the
-	<code>net/http</code> package, as well as bug fixes to the runtime,
-	the compiler, and the <code>archive/zip</code>, <code>time</code>,
-	and <code>syscall</code> packages. See the
-	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.12+label%3ACherryPickApproved">Go
-	1.15.12 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>net/http</code> package, as well as
+	bug
+	fixes to the compiler, runtime, and the <code>archive/zip</code>, <code>syscall</code>, and <code>time</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.12+label%3ACherryPickApproved">Go 1.15.12 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.15.13
 	(released 2021-06-03)
-	includes security fixes to the
-	<code>archive/zip</code>, <code>math/big</code>,
-	<code>net</code>, and <code>net/http/httputil</code> packages,
-	as well as bug fixes to the linker, the <code>go</code> command,
-	and the <code>math/big</code> and <code>net/http</code> packages. See the
-	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.13+label%3ACherryPickApproved">Go
-	1.15.13 milestone</a> on our issue tracker for details.
+	includes
+	security
+	fixes to the <code>archive/zip</code>, <code>math/big</code>, <code>net</code>, and <code>net/http/httputil</code> packages, as well as
+	bug
+	fixes to the linker, the <code>go</code> command, and the <code>math/big</code> and <code>net/http</code> packages.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.13+label%3ACherryPickApproved">Go 1.15.13 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.15.14
 	(released 2021-07-12)
-	includes a security fix to the <code>crypto/tls</code> package,
-	as well as bug fixes to the linker, and the <code>net</code> package. See the
-	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.14+label%3ACherryPickApproved">Go
-	1.15.14 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>crypto/tls</code> package, as well as
+	bug
+	fixes to the linker and the <code>net</code> package.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.14+label%3ACherryPickApproved">Go 1.15.14 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<p>
 	go1.15.15
 	(released 2021-08-05)
-	includes a security fix to the <code>net/http/httputil</code> package,
-	as well as bug fixes to the compiler, the runtime, the <code>go</code> command, and the
-	<code>net/http</code> package. See the
-	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.15+label%3ACherryPickApproved">Go
-	1.15.15 milestone</a> on our issue tracker for details.
+	includes
+	a
+	security
+	fix to the <code>net/http/httputil</code> package, as well as
+	bug
+	fixes to the compiler, runtime, the <code>go</code> command, and the <code>net/http</code> package.
+	See the
+	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.15+label%3ACherryPickApproved">Go 1.15.15 milestone</a>
+	on our issue tracker for details.
 	</p>
 	<h2 id="go1.14">go1.14 (released 2020-02-25)</h2>
 	<p>
@@ -521,7 +609,7 @@
 	go1.13.3
 	(released 2019-10-17)
 	includes
-	fixes to the go command, the toolchain, the runtime, and the <code>syscall</code>, <code>net</code>, <code>net/http</code>, and <code>crypto/ecdsa</code> packages.
+	fixes to the go command, the toolchain, the runtime, and the <code>crypto/ecdsa</code>, <code>net</code>, <code>net/http</code>, and <code>syscall</code> packages.
 	See the
 	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.13.3+label%3ACherryPickApproved">Go 1.13.3 milestone</a>
 	on our issue tracker for details.
@@ -722,7 +810,7 @@
 	go1.12.9
 	(released 2019-08-15)
 	includes
-	fixes to the linker, and the <code>os</code> and <code>math/big</code> packages.
+	fixes to the linker, and the <code>math/big</code> and <code>os</code> packages.
 	See the
 	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.12.9+label%3ACherryPickApproved">Go 1.12.9 milestone</a>
 	on our issue tracker for details.
@@ -751,7 +839,7 @@
 	go1.12.12
 	(released 2019-10-17)
 	includes
-	fixes to the go command, runtime, and the <code>syscall</code> and <code>net</code> packages.
+	fixes to the go command, runtime, and the <code>net</code> and <code>syscall</code> packages.
 	See the
 	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.12.12+label%3ACherryPickApproved">Go 1.12.12 milestone</a>
 	on our issue tracker for details.
@@ -843,7 +931,7 @@
 	go1.11.4
 	(released 2018-12-14)
 	includes
-	fixes to cgo, the compiler, linker, runtime, documentation, go command, and the <code>net/http</code> and <code>go/types</code> packages.
+	fixes to cgo, the compiler, linker, runtime, documentation, go command, and the <code>go/types</code> and <code>net/http</code> packages.
 	It includes a fix to a bug introduced in Go 1.11.3 that broke <code>go</code>
 	<code>get</code> for import path patterns containing "<code>...</code>".
 	See the
@@ -972,7 +1060,7 @@
 	go1.10.4
 	(released 2018-08-24)
 	includes
-	fixes to the go command, linker, and the <code>net/http</code>, <code>mime/multipart</code>, <code>ld/macho</code>, <code>bytes</code>, and <code>strings</code> packages.
+	fixes to the go command, linker, and the <code>bytes</code>, <code>mime/multipart</code>, <code>net/http</code>, and <code>strings</code> packages.
 	See the
 	<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.10.4+label%3ACherryPickApproved">Go 1.10.4 milestone</a>
 	on our issue tracker for details.
diff --git a/internal/history/history.go b/internal/history/history.go
index 42aabf2..4a2d985 100644
--- a/internal/history/history.go
+++ b/internal/history/history.go
@@ -17,17 +17,22 @@
 
 // A Release describes a single Go release.
 type Release struct {
-	Version  Version
-	Date     Date
-	Security bool // whether this is a security release
-	Future   bool // if true, the release hasn't happened yet
+	Version Version
+	Date    Date
+	Future  bool // if true, the release hasn't happened yet
 
 	// Release content summary.
-	Quantifier    string          // Optional quantifier. Empty string for unspecified amount of fixes (typical), "a" for a single fix, "two", "three" for multiple fixes, etc.
-	Components    []template.HTML // Components involved. For example, "cgo", "the <code>go</code> command", "the runtime", etc.
-	Packages      []string        // Packages involved. For example, "net/http", "crypto/x509", etc.
-	More          template.HTML   // Additional release content.
-	CustomSummary template.HTML   // CustomSummary, if non-empty, replaces the entire release content summary with custom HTML.
+	Security      *FixSummary   // Security fixes, if any.
+	Bug           *FixSummary   // Bug fixes, if any.
+	More          template.HTML // Additional release content.
+	CustomSummary template.HTML // CustomSummary, if non-empty, replaces the entire release content summary with custom HTML.
+}
+
+// FixSummary summarizes fixes in a Go release, listing components and packages involved.
+type FixSummary struct {
+	Quantifier string          // Optional quantifier. Empty string for unspecified amount of fixes (typical), "a" for a single fix, "two", "three" for multiple fixes, etc.
+	Components []template.HTML // Components involved. For example, "cgo", "the compiler", "runtime", "the <code>go</code> command", etc.
+	Packages   []string        // Packages involved. For example, "crypto/x509", "net/http", etc.
 }
 
 // A Version is a Go release version.
@@ -58,6 +63,7 @@
 	}
 }
 
+// Before reports whether version v comes before version u.
 func (v Version) Before(u Version) bool {
 	if v.X != u.X {
 		return v.X < u.X
@@ -153,19 +159,19 @@
 // 	c1, and [2 or more packages]
 // 	c1, c2, and [1 or more packages]
 //
-func (r *Release) ComponentsAndPackages() template.HTML {
+func (f *FixSummary) ComponentsAndPackages() template.HTML {
 	var buf strings.Builder
 
 	// List components, if any.
-	for i, comp := range r.Components {
-		if len(r.Packages) == 0 {
+	for i, comp := range f.Components {
+		if len(f.Packages) == 0 {
 			// No packages, so components are joined with more rules.
 			switch {
-			case i != 0 && len(r.Components) == 2:
+			case i != 0 && len(f.Components) == 2:
 				buf.WriteString(" and ")
-			case i != 0 && len(r.Components) >= 3 && i != len(r.Components)-1:
+			case i != 0 && len(f.Components) >= 3 && i != len(f.Components)-1:
 				buf.WriteString(", ")
-			case i != 0 && len(r.Components) >= 3 && i == len(r.Components)-1:
+			case i != 0 && len(f.Components) >= 3 && i == len(f.Components)-1:
 				buf.WriteString(", and ")
 			}
 		} else {
@@ -178,32 +184,32 @@
 	}
 
 	// Join components and packages using a comma and/or "and" as needed.
-	if len(r.Components) > 0 && len(r.Packages) > 0 {
-		if len(r.Components)+len(r.Packages) >= 3 {
+	if len(f.Components) > 0 && len(f.Packages) > 0 {
+		if len(f.Components)+len(f.Packages) >= 3 {
 			buf.WriteString(",")
 		}
 		buf.WriteString(" and ")
 	}
 
 	// List packages, if any.
-	if len(r.Packages) > 0 {
+	if len(f.Packages) > 0 {
 		buf.WriteString("the ")
 	}
-	for i, pkg := range r.Packages {
+	for i, pkg := range f.Packages {
 		switch {
-		case i != 0 && len(r.Packages) == 2:
+		case i != 0 && len(f.Packages) == 2:
 			buf.WriteString(" and ")
-		case i != 0 && len(r.Packages) >= 3 && i != len(r.Packages)-1:
+		case i != 0 && len(f.Packages) >= 3 && i != len(f.Packages)-1:
 			buf.WriteString(", ")
-		case i != 0 && len(r.Packages) >= 3 && i == len(r.Packages)-1:
+		case i != 0 && len(f.Packages) >= 3 && i == len(f.Packages)-1:
 			buf.WriteString(", and ")
 		}
 		buf.WriteString("<code>" + html.EscapeString(pkg) + "</code>")
 	}
 	switch {
-	case len(r.Packages) == 1:
+	case len(f.Packages) == 1:
 		buf.WriteString(" package")
-	case len(r.Packages) >= 2:
+	case len(f.Packages) >= 2:
 		buf.WriteString(" packages")
 	}
 
diff --git a/internal/history/release.go b/internal/history/release.go
index a76ffb3..94c6a0d 100644
--- a/internal/history/release.go
+++ b/internal/history/release.go
@@ -19,386 +19,481 @@
 	},
 	{
 		Date: Date{2022, 3, 3}, Version: Version{1, 17, 8},
-		CustomSummary: `includes a security fix to the <code>regexp/syntax</code> package, as well as bug fixes to the compiler, runtime, the <code>go</code> command, and the <code>crypto/x509</code>, and <code>net</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.8+label%3ACherryPickApproved">Go 1.17.8 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"regexp/syntax"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"crypto/x509", "net"},
+		},
 	},
 	{
 		Date: Date{2022, 3, 3}, Version: Version{1, 16, 15},
-		CustomSummary: `includes a security fix to the <code>regexp/syntax</code> package, as well as bug fixes to the compiler, runtime, the <code>go</code> command, and to the <code>net</code> package.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.15+label%3ACherryPickApproved">Go 1.16.15 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"regexp/syntax"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"net"},
+		},
 	},
 	{
 		Date: Date{2022, 2, 10}, Version: Version{1, 17, 7},
-		CustomSummary: `includes security fixes to the <code>crypto/elliptic</code>, <code>math/big</code> packages and to the <code>go</code> command, as well as bug fixes to the compiler, linker, runtime, the <code>go</code> command, and the <code>debug/macho</code>, <code>debug/pe</code>, and <code>net/http/httptest</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.7+label%3ACherryPickApproved">Go 1.17.7 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{
+			Components: []template.HTML{"the <code>go</code> command"},
+			Packages:   []string{"crypto/elliptic", "math/big"},
+		},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"debug/macho", "debug/pe", "net/http/httptest"},
+		},
 	},
 	{
 		Date: Date{2022, 2, 10}, Version: Version{1, 16, 14},
-		CustomSummary: `includes security fixes to the <code>crypto/elliptic</code>, <code>math/big</code> packages and to the <code>go</code> command, as well as bug fixes to the compiler, linker, runtime, the <code>go</code> command, and the <code>debug/macho</code>, <code>debug/pe</code>, <code>net/http/httptest</code>, and <code>testing</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.14+label%3ACherryPickApproved">Go 1.16.14 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{
+			Components: []template.HTML{"the <code>go</code> command"},
+			Packages:   []string{"crypto/elliptic", "math/big"},
+		},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"debug/macho", "debug/pe", "net/http/httptest", "testing"},
+		},
 	},
 	{
 		Date: Date{2022, 1, 6}, Version: Version{1, 17, 6},
-		Components: []template.HTML{"the compiler", "linker", "runtime"},
-		Packages:   []string{"crypto/x509", "net/http", "reflect"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime"},
+			Packages:   []string{"crypto/x509", "net/http", "reflect"},
+		},
 	},
 	{
 		Date: Date{2022, 1, 6}, Version: Version{1, 16, 13},
-		Components: []template.HTML{"the compiler", "linker", "runtime"},
-		Packages:   []string{"net/http"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 12, 9}, Version: Version{1, 17, 5},
-		CustomSummary: `includes security fixes to the <code>syscall</code> and <code>net/http</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.5+label%3ACherryPickApproved">Go 1.17.5 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Packages: []string{"net/http", "syscall"}},
 	},
 	{
 		Date: Date{2021, 12, 9}, Version: Version{1, 16, 12},
-		CustomSummary: `includes security fixes to the <code>syscall</code> and <code>net/http</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.12+label%3ACherryPickApproved">Go 1.16.12 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Packages: []string{"net/http", "syscall"}},
 	},
 	{
 		Date: Date{2021, 12, 2}, Version: Version{1, 17, 4},
-		Components: []template.HTML{"the compiler", "linker", "runtime"},
-		Packages:   []string{"go/types", "net/http", "time"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime"},
+			Packages:   []string{"go/types", "net/http", "time"},
+		},
 	},
 	{
 		Date: Date{2021, 12, 2}, Version: Version{1, 16, 11},
-		Components: []template.HTML{"the compiler", "runtime"},
-		Packages:   []string{"net/http", "net/http/httptest", "time"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime"},
+			Packages:   []string{"net/http", "net/http/httptest", "time"},
+		},
 	},
 	{
 		Date: Date{2021, 11, 4}, Version: Version{1, 17, 3},
-		CustomSummary: `includes security fixes to the <code>archive/zip</code> and <code>debug/macho</code> packages,
-as well as bug fixes to the compiler, linker, runtime, the <code>go</code> command, the <code>misc/wasm</code> directory, and to the <code>net/http</code> and <code>syscall</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.3+label%3ACherryPickApproved">Go 1.17.3 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Packages: []string{"archive/zip", "debug/macho"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command", "the <code>misc/wasm</code> directory"},
+			Packages:   []string{"net/http", "syscall"},
+		},
 	},
 	{
 		Date: Date{2021, 11, 4}, Version: Version{1, 16, 10},
-		CustomSummary: `includes security fixes to the <code>archive/zip</code> and <code>debug/macho</code> packages,
-as well as bug fixes to the compiler, linker, runtime, the <code>misc/wasm</code> directory, and to the <code>net/http</code> package.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.10+label%3ACherryPickApproved">Go 1.16.10 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Packages: []string{"archive/zip", "debug/macho"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>misc/wasm</code> directory"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 10, 7}, Version: Version{1, 17, 2},
-		CustomSummary: `includes a security fix to the linker and <code>misc/wasm</code> directory,
-as well as bug fixes to the compiler, the runtime, the <code>go</code> command, and to the <code>time</code> and <code>text/template</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.2+label%3ACherryPickApproved">Go
-1.17.2 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Components: []template.HTML{"linker", "the <code>misc/wasm</code> directory"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"text/template", "time"},
+		},
 	},
 	{
 		Date: Date{2021, 10, 7}, Version: Version{1, 16, 9},
-		CustomSummary: `includes a security fix to the linker and <code>misc/wasm</code> directory,
-as well as bug fixes to the runtime and to the <code>text/template</code> package.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.9+label%3ACherryPickApproved">Go
-1.16.9 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Components: []template.HTML{"linker", "the <code>misc/wasm</code> directory"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"runtime"},
+			Packages:   []string{"text/template"},
+		},
 	},
 	{
 		Date: Date{2021, 9, 9}, Version: Version{1, 17, 1},
-		CustomSummary: `includes a security fix to the <code>archive/zip</code> package,
-as well as bug fixes to the compiler, linker, the <code>go</code> command, and to the <code>crypto/rand</code>, <code>embed</code>, <code>go/types</code>, <code>html/template</code>, and <code>net/http</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.17.1+label%3ACherryPickApproved">Go
-1.17.1 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"archive/zip"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "the <code>go</code> command"},
+			Packages:   []string{"crypto/rand", "embed", "go/types", "html/template", "net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 9, 9}, Version: Version{1, 16, 8},
-		CustomSummary: `includes a security fix to the <code>archive/zip</code> package,
-as well as bug fixes to the <code>archive/zip</code>, <code>go/internal/gccgoimporter</code>, <code>html/template</code>, <code>net/http</code>, and <code>runtime/pprof</code> packages.
-See the <a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.8+label%3ACherryPickApproved">Go
-1.16.8 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"archive/zip"}},
+		Bug: &FixSummary{
+			Packages: []string{"archive/zip, go/internal/gccgoimporter", "html/template", "net/http", "runtime/pprof"},
+		},
 	},
 	{
 		Date: Date{2021, 8, 16}, Version: Version{1, 17, 0},
 	},
 	{
 		Date: Date{2021, 8, 5}, Version: Version{1, 16, 7},
-		CustomSummary: `includes a security fix to the <code>net/http/httputil</code> package,
-as well as bug fixes to the compiler, the linker, the runtime, the <code>go</code> command,
-and the <code>net/http</code> package. See the
-<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.7+label%3ACherryPickApproved">Go
-1.16.7 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"net/http/httputil"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 8, 5}, Version: Version{1, 15, 15},
-		CustomSummary: `includes a security fix to the <code>net/http/httputil</code> package,
-as well as bug fixes to the compiler, the runtime, the <code>go</code> command, and the
-<code>net/http</code> package. See the
-<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.15+label%3ACherryPickApproved">Go
-1.15.15 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"net/http/httputil"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 7, 12}, Version: Version{1, 16, 6},
-		CustomSummary: `includes a security fix to the <code>crypto/tls</code> package,
-as well as bug fixes to the compiler, and the <code>net</code> and <code>net/http</code> packages. See the
-<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.6+label%3ACherryPickApproved">Go
-1.16.6 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"crypto/tls"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler"},
+			Packages:   []string{"net", "net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 7, 12}, Version: Version{1, 15, 14},
-		CustomSummary: `includes a security fix to the <code>crypto/tls</code> package,
-as well as bug fixes to the linker, and the <code>net</code> package. See the
-<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.14+label%3ACherryPickApproved">Go
-1.15.14 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"crypto/tls"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the linker"},
+			Packages:   []string{"net"},
+		},
 	},
 	{
 		Date: Date{2021, 6, 3}, Version: Version{1, 16, 5},
-		CustomSummary: `includes security fixes to the
-<code>archive/zip</code>, <code>math/big</code>,
-<code>net</code>, and <code>net/http/httputil</code> packages,
-as well as bug fixes to the linker, the <code>go</code> command,
-and the <code>net/http</code> package. See the
-<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.5+label%3ACherryPickApproved">Go
-1.16.5 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Packages: []string{"archive/zip", "math/big", "net", "net/http/httputil"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the linker", "the <code>go</code> command"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 6, 3}, Version: Version{1, 15, 13},
-		CustomSummary: `includes security fixes to the
-<code>archive/zip</code>, <code>math/big</code>,
-<code>net</code>, and <code>net/http/httputil</code> packages,
-as well as bug fixes to the linker, the <code>go</code> command,
-and the <code>math/big</code> and <code>net/http</code> packages. See the
-<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.13+label%3ACherryPickApproved">Go
-1.15.13 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Packages: []string{"archive/zip", "math/big", "net", "net/http/httputil"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the linker", "the <code>go</code> command"},
+			Packages:   []string{"math/big", "net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 5, 6}, Version: Version{1, 16, 4},
-		CustomSummary: `includes a security fix to the
-<code>net/http</code> package, as well as bug fixes to the runtime,
-the compiler, and the <code>archive/zip</code>, <code>time</code>,
-and <code>syscall</code> packages. See the
-<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.16.4+label%3ACherryPickApproved">Go
-1.16.4 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"net/http"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime"},
+			Packages:   []string{"archive/zip", "syscall", "time"},
+		},
 	},
 	{
 		Date: Date{2021, 5, 6}, Version: Version{1, 15, 12},
-		CustomSummary: `includes a security fix to the
-<code>net/http</code> package, as well as bug fixes to the runtime,
-the compiler, and the <code>archive/zip</code>, <code>time</code>,
-and <code>syscall</code> packages. See the
-<a href="https://github.com/golang/go/issues?q=milestone%3AGo1.15.12+label%3ACherryPickApproved">Go
-1.15.12 milestone</a> on our issue tracker for details.`,
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"net/http"}},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime"},
+			Packages:   []string{"archive/zip", "syscall", "time"},
+		},
 	},
 	{
 		Date: Date{2021, 4, 1}, Version: Version{1, 16, 3},
-		Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
-		Packages:   []string{"testing", "time"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"testing", "time"},
+		},
 	},
 	{
 		Date: Date{2021, 4, 1}, Version: Version{1, 15, 11},
-		Components: []template.HTML{"cgo", "the compiler", "linker", "runtime", "the <code>go</code> command"},
-		Packages:   []string{"database/sql", "net/http"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "linker", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"database/sql", "net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 3, 11}, Version: Version{1, 16, 2},
-		Components: []template.HTML{"cgo", "the compiler", "linker", "the <code>go</code> command"},
-		Packages:   []string{"syscall", "time"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "linker", "the <code>go</code> command"},
+			Packages:   []string{"syscall", "time"},
+		},
 	},
 	{
 		Date: Date{2021, 3, 11}, Version: Version{1, 15, 10},
-		Components: []template.HTML{"the compiler", "the <code>go</code> command"},
-		Packages:   []string{"net/http", "os", "syscall", "time"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "the <code>go</code> command"},
+			Packages:   []string{"net/http", "os", "syscall", "time"},
+		},
 	},
 	{
-		Date: Date{2021, 3, 10}, Version: Version{1, 16, 1}, Security: true,
-		Packages: []string{"archive/zip", "encoding/xml"},
+		Date: Date{2021, 3, 10}, Version: Version{1, 16, 1},
+		Security: &FixSummary{Packages: []string{"archive/zip", "encoding/xml"}},
 	},
 	{
-		Date: Date{2021, 3, 10}, Version: Version{1, 15, 9}, Security: true,
-		Packages: []string{"encoding/xml"},
+		Date: Date{2021, 3, 10}, Version: Version{1, 15, 9},
+		Security: &FixSummary{Packages: []string{"encoding/xml"}},
 	},
 	{
 		Date: Date{2021, 2, 16}, Version: Version{1, 16, 0},
 	},
 	{
 		Date: Date{2021, 2, 4}, Version: Version{1, 15, 8},
-		Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
-		Packages:   []string{"net/http"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2021, 2, 4}, Version: Version{1, 14, 15},
-		Components: []template.HTML{"the compiler", "runtime", "the <code>go</code> command"},
-		Packages:   []string{"net/http"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
-		Date: Date{2021, 1, 19}, Version: Version{1, 15, 7}, Security: true,
-		Components: []template.HTML{"the <code>go</code> command"},
-		Packages:   []string{"crypto/elliptic"},
+		Date: Date{2021, 1, 19}, Version: Version{1, 15, 7},
+		Security: &FixSummary{
+			Components: []template.HTML{"the <code>go</code> command"},
+			Packages:   []string{"crypto/elliptic"},
+		},
 	},
 	{
-		Date: Date{2021, 1, 19}, Version: Version{1, 14, 14}, Security: true,
-		Components: []template.HTML{"the <code>go</code> command"},
-		Packages:   []string{"crypto/elliptic"},
+		Date: Date{2021, 1, 19}, Version: Version{1, 14, 14},
+		Security: &FixSummary{
+			Components: []template.HTML{"the <code>go</code> command"},
+			Packages:   []string{"crypto/elliptic"},
+		},
 	},
 	{
 		Date: Date{2020, 12, 3}, Version: Version{1, 15, 6},
-		Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
-		Packages:   []string{"io"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"io"},
+		},
 	},
 	{
 		Date: Date{2020, 12, 3}, Version: Version{1, 14, 13},
-		Components: []template.HTML{"the compiler", "runtime", "the <code>go</code> command"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime", "the <code>go</code> command"},
+		},
 	},
 	{
-		Date: Date{2020, 11, 12}, Version: Version{1, 15, 5}, Security: true,
-		Components: []template.HTML{"the <code>go</code> command"},
-		Packages:   []string{"math/big"},
+		Date: Date{2020, 11, 12}, Version: Version{1, 15, 5},
+		Security: &FixSummary{
+			Components: []template.HTML{"the <code>go</code> command"},
+			Packages:   []string{"math/big"},
+		},
 	},
 	{
-		Date: Date{2020, 11, 12}, Version: Version{1, 14, 12}, Security: true,
-		Components: []template.HTML{"the <code>go</code> command"},
-		Packages:   []string{"math/big"},
+		Date: Date{2020, 11, 12}, Version: Version{1, 14, 12},
+		Security: &FixSummary{
+			Components: []template.HTML{"the <code>go</code> command"},
+			Packages:   []string{"math/big"},
+		},
 	},
 	{
 		Date: Date{2020, 11, 5}, Version: Version{1, 15, 4},
-		Components: []template.HTML{"cgo", "the compiler", "linker", "runtime"},
-		Packages:   []string{"compress/flate", "net/http", "reflect", "time"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "linker", "runtime"},
+			Packages:   []string{"compress/flate", "net/http", "reflect", "time"},
+		},
 	},
 	{
 		Date: Date{2020, 11, 5}, Version: Version{1, 14, 11},
-		Components: []template.HTML{"the runtime"},
-		Packages:   []string{"net/http", "time"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the runtime"},
+			Packages:   []string{"net/http", "time"},
+		},
 	},
 	{
 		Date: Date{2020, 10, 14}, Version: Version{1, 15, 3},
-		Components: []template.HTML{"cgo", "the compiler", "runtime", "the <code>go</code> command"},
-		Packages:   []string{"bytes", "plugin", "testing"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "runtime", "the <code>go</code> command"},
+			Packages:   []string{"bytes", "plugin", "testing"},
+		},
 	},
 	{
 		Date: Date{2020, 10, 14}, Version: Version{1, 14, 10},
-		Components: []template.HTML{"the compiler", "runtime"},
-		Packages:   []string{"plugin", "testing"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime"},
+			Packages:   []string{"plugin", "testing"},
+		},
 	},
 	{
 		Date: Date{2020, 9, 9}, Version: Version{1, 15, 2},
-		Components: []template.HTML{"the compiler", "runtime", "documentation", "the <code>go</code> command"},
-		Packages:   []string{"net/mail", "os", "sync", "testing"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime", "documentation", "the <code>go</code> command"},
+			Packages:   []string{"net/mail", "os", "sync", "testing"},
+		},
 	},
 	{
 		Date: Date{2020, 9, 9}, Version: Version{1, 14, 9},
-		Components: []template.HTML{"the compiler", "linker", "runtime", "documentation"},
-		Packages:   []string{"net/http", "testing"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "documentation"},
+			Packages:   []string{"net/http", "testing"},
+		},
 	},
 	{
-		Date: Date{2020, 9, 1}, Version: Version{1, 15, 1}, Security: true,
-		Packages: []string{"net/http/cgi", "net/http/fcgi"},
+		Date: Date{2020, 9, 1}, Version: Version{1, 15, 1},
+		Security: &FixSummary{Packages: []string{"net/http/cgi", "net/http/fcgi"}},
 	},
 	{
-		Date: Date{2020, 9, 1}, Version: Version{1, 14, 8}, Security: true,
-		Packages: []string{"net/http/cgi", "net/http/fcgi"},
+		Date: Date{2020, 9, 1}, Version: Version{1, 14, 8},
+		Security: &FixSummary{Packages: []string{"net/http/cgi", "net/http/fcgi"}},
 	},
 	{
 		Date: Date{2020, 8, 11}, Version: Version{1, 15, 0},
 	},
 	{
-		Date: Date{2020, 8, 6}, Version: Version{1, 14, 7}, Security: true,
-		Packages: []string{"encoding/binary"},
+		Date: Date{2020, 8, 6}, Version: Version{1, 14, 7},
+		Security: &FixSummary{Packages: []string{"encoding/binary"}},
 	},
 	{
-		Date: Date{2020, 8, 6}, Version: Version{1, 13, 15}, Security: true,
-		Packages: []string{"encoding/binary"},
+		Date: Date{2020, 8, 6}, Version: Version{1, 13, 15},
+		Security: &FixSummary{Packages: []string{"encoding/binary"}},
 	},
 	{
 		Date: Date{2020, 7, 16}, Version: Version{1, 14, 6},
-		Components: []template.HTML{"the <code>go</code> command", "the compiler", "the linker", "vet"},
-		Packages:   []string{"database/sql", "encoding/json", "net/http", "reflect", "testing"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the <code>go</code> command", "the compiler", "the linker", "vet"},
+			Packages:   []string{"database/sql", "encoding/json", "net/http", "reflect", "testing"},
+		},
 	},
 	{
 		Date: Date{2020, 7, 16}, Version: Version{1, 13, 14},
-		Components: []template.HTML{"the compiler", "vet"},
-		Packages:   []string{"database/sql", "net/http", "reflect"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "vet"},
+			Packages:   []string{"database/sql", "net/http", "reflect"},
+		},
 	},
 	{
-		Date: Date{2020, 7, 14}, Version: Version{1, 14, 5}, Security: true,
-		Packages: []string{"crypto/x509", "net/http"},
+		Date: Date{2020, 7, 14}, Version: Version{1, 14, 5},
+		Security: &FixSummary{Packages: []string{"crypto/x509", "net/http"}},
 	},
 	{
-		Date: Date{2020, 7, 14}, Version: Version{1, 13, 13}, Security: true,
-		Packages: []string{"crypto/x509", "net/http"},
+		Date: Date{2020, 7, 14}, Version: Version{1, 13, 13},
+		Security: &FixSummary{Packages: []string{"crypto/x509", "net/http"}},
 	},
 	{
 		Date: Date{2020, 6, 1}, Version: Version{1, 14, 4},
-		Components: []template.HTML{"the <code>go</code> <code>doc</code> command", "the runtime"},
-		Packages:   []string{"encoding/json", "os"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the <code>go</code> <code>doc</code> command", "the runtime"},
+			Packages:   []string{"encoding/json", "os"},
+		},
 	},
 	{
 		Date: Date{2020, 6, 1}, Version: Version{1, 13, 12},
-		Components: []template.HTML{"the runtime"},
-		Packages:   []string{"go/types", "math/big"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the runtime"},
+			Packages:   []string{"go/types", "math/big"},
+		},
 	},
 	{
 		Date: Date{2020, 5, 14}, Version: Version{1, 14, 3},
-		Components: []template.HTML{"cgo", "the compiler", "the runtime"},
-		Packages:   []string{"go/doc", "math/big"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "the runtime"},
+			Packages:   []string{"go/doc", "math/big"},
+		},
 	},
 	{
 		Date: Date{2020, 5, 14}, Version: Version{1, 13, 11},
-		Components: []template.HTML{"the compiler"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler"},
+		},
 	},
 	{
 		Date: Date{2020, 4, 8}, Version: Version{1, 14, 2},
-		Components: []template.HTML{"cgo", "the go command", "the runtime"},
-		Packages:   []string{"os/exec", "testing"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the go command", "the runtime"},
+			Packages:   []string{"os/exec", "testing"},
+		},
 	},
 	{
 		Date: Date{2020, 4, 8}, Version: Version{1, 13, 10},
-		Components: []template.HTML{"the go command", "the runtime"},
-		Packages:   []string{"os/exec", "time"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command", "the runtime"},
+			Packages:   []string{"os/exec", "time"},
+		},
 	},
 	{
 		Date: Date{2020, 3, 19}, Version: Version{1, 14, 1},
-		Components: []template.HTML{"the go command", "tools", "the runtime"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command", "tools", "the runtime"},
+		},
 	},
 	{
 		Date: Date{2020, 3, 19}, Version: Version{1, 13, 9},
-		Components: []template.HTML{"the go command", "tools", "the runtime", "the toolchain"},
-		Packages:   []string{"crypto/cypher"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command", "tools", "the runtime", "the toolchain"},
+			Packages:   []string{"crypto/cypher"},
+		},
 	},
 	{
 		Date: Date{2020, 2, 25}, Version: Version{1, 14, 0},
 	},
 	{
 		Date: Date{2020, 2, 12}, Version: Version{1, 13, 8},
-		Components: []template.HTML{"the runtime"},
-		Packages:   []string{"crypto/x509", "net/http"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the runtime"},
+			Packages:   []string{"crypto/x509", "net/http"},
+		},
 	},
 	{
 		Date: Date{2020, 2, 12}, Version: Version{1, 12, 17},
-		Quantifier: "a",
-		Components: []template.HTML{"the runtime"},
+		Bug: &FixSummary{
+			Quantifier: "a",
+			Components: []template.HTML{"the runtime"},
+		},
 	},
 	{
-		Date: Date{2020, 1, 28}, Version: Version{1, 13, 7}, Security: true,
-		Quantifier: "two",
-		Packages:   []string{"crypto/x509"},
+		Date: Date{2020, 1, 28}, Version: Version{1, 13, 7},
+		Security: &FixSummary{Quantifier: "two", Packages: []string{"crypto/x509"}},
 	},
 	{
-		Date: Date{2020, 1, 28}, Version: Version{1, 12, 16}, Security: true,
-		Quantifier: "two",
-		Packages:   []string{"crypto/x509"},
+		Date: Date{2020, 1, 28}, Version: Version{1, 12, 16},
+		Security: &FixSummary{Quantifier: "two", Packages: []string{"crypto/x509"}},
 	},
 	{
 		Date: Date{2020, 1, 9}, Version: Version{1, 13, 6},
-		Components: []template.HTML{"the runtime"},
-		Packages:   []string{"net/http"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the runtime"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2020, 1, 9}, Version: Version{1, 12, 15},
-		Components: []template.HTML{"the runtime"},
-		Packages:   []string{"net/http"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the runtime"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2019, 12, 4}, Version: Version{1, 13, 5},
-		Components: []template.HTML{"the go command", "the runtime", "the linker"},
-		Packages:   []string{"net/http"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command", "the runtime", "the linker"},
+			Packages:   []string{"net/http"},
+		},
 	},
 	{
 		Date: Date{2019, 12, 4}, Version: Version{1, 12, 14},
-		Quantifier: "a",
-		Components: []template.HTML{"the runtime"},
+		Bug: &FixSummary{
+			Quantifier: "a",
+			Components: []template.HTML{"the runtime"},
+		},
 	},
 	{
 		Date: Date{2019, 10, 31}, Version: Version{1, 13, 4},
-		Packages: []string{"net/http", "syscall"},
+		Bug: &FixSummary{
+			Packages: []string{"net/http", "syscall"},
+		},
 		More: `It also fixes an issue on macOS 10.15 Catalina
 where the non-notarized installer and binaries were being
 <a href="/issue/34986">rejected by Gatekeeper</a>.`,
@@ -412,73 +507,93 @@
 	},
 	{
 		Date: Date{2019, 10, 17}, Version: Version{1, 13, 3},
-		Components: []template.HTML{"the go command", "the toolchain", "the runtime"},
-		Packages:   []string{"syscall", "net", "net/http", "crypto/ecdsa"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command", "the toolchain", "the runtime"},
+			Packages:   []string{"crypto/ecdsa", "net", "net/http", "syscall"},
+		},
 	},
 	{
 		Date: Date{2019, 10, 17}, Version: Version{1, 12, 12},
-		Components: []template.HTML{"the go command", "runtime"},
-		Packages:   []string{"syscall", "net"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command", "runtime"},
+			Packages:   []string{"net", "syscall"},
+		},
 	},
 	{
-		Date: Date{2019, 10, 17}, Version: Version{1, 13, 2}, Security: true,
-		Components: []template.HTML{"the compiler"},
-		Packages:   []string{"crypto/dsa"},
+		Date: Date{2019, 10, 17}, Version: Version{1, 13, 2},
+		Security: &FixSummary{
+			Components: []template.HTML{"the compiler"},
+			Packages:   []string{"crypto/dsa"},
+		},
 	},
 	{
-		Date: Date{2019, 10, 17}, Version: Version{1, 12, 11}, Security: true,
-		Packages: []string{"crypto/dsa"},
+		Date: Date{2019, 10, 17}, Version: Version{1, 12, 11},
+		Security: &FixSummary{Packages: []string{"crypto/dsa"}},
 	},
 	{
-		Date: Date{2019, 9, 25}, Version: Version{1, 13, 1}, Security: true,
-		Packages: []string{"net/http", "net/textproto"},
+		Date: Date{2019, 9, 25}, Version: Version{1, 13, 1},
+		Security: &FixSummary{Packages: []string{"net/http", "net/textproto"}},
 	},
 	{
-		Date: Date{2019, 9, 25}, Version: Version{1, 12, 10}, Security: true,
-		Packages: []string{"net/http", "net/textproto"},
+		Date: Date{2019, 9, 25}, Version: Version{1, 12, 10},
+		Security: &FixSummary{Packages: []string{"net/http", "net/textproto"}},
 	},
 	{
 		Date: Date{2019, 9, 3}, Version: Version{1, 13, 0},
 	},
 	{
 		Date: Date{2019, 8, 15}, Version: Version{1, 12, 9},
-		Components: []template.HTML{"the linker"},
-		Packages:   []string{"os", "math/big"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the linker"},
+			Packages:   []string{"math/big", "os"},
+		},
 	},
 	{
-		Date: Date{2019, 8, 13}, Version: Version{1, 12, 8}, Security: true,
-		Packages: []string{"net/http", "net/url"},
+		Date: Date{2019, 8, 13}, Version: Version{1, 12, 8},
+		Security: &FixSummary{Packages: []string{"net/http", "net/url"}},
 	},
 	{
-		Date: Date{2019, 8, 13}, Version: Version{1, 11, 13}, Security: true,
-		Packages: []string{"net/http", "net/url"},
+		Date: Date{2019, 8, 13}, Version: Version{1, 11, 13},
+		Security: &FixSummary{Packages: []string{"net/http", "net/url"}},
 	},
 	{
 		Date: Date{2019, 7, 8}, Version: Version{1, 12, 7},
-		Components: []template.HTML{"cgo", "the compiler", "the linker"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "the linker"},
+		},
 	},
 	{
 		Date: Date{2019, 7, 8}, Version: Version{1, 11, 12},
-		Components: []template.HTML{"the compiler", "the linker"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "the linker"},
+		},
 	},
 	{
 		Date: Date{2019, 6, 11}, Version: Version{1, 12, 6},
-		Components: []template.HTML{"the compiler", "the linker", "the go command"},
-		Packages:   []string{"crypto/x509", "net/http", "os"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "the linker", "the go command"},
+			Packages:   []string{"crypto/x509", "net/http", "os"},
+		},
 	},
 	{
 		Date: Date{2019, 6, 11}, Version: Version{1, 11, 11},
-		Quantifier: "a",
-		Packages:   []string{"crypto/x509"},
+		Bug: &FixSummary{
+			Quantifier: "a",
+			Packages:   []string{"crypto/x509"},
+		},
 	},
 	{
 		Date: Date{2019, 5, 6}, Version: Version{1, 12, 5},
-		Components: []template.HTML{"the compiler", "the linker", "the go command", "the runtime"},
-		Packages:   []string{"os"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "the linker", "the go command", "the runtime"},
+			Packages:   []string{"os"},
+		},
 	},
 	{
 		Date: Date{2019, 5, 6}, Version: Version{1, 11, 10},
-		Components: []template.HTML{"the runtime", "the linker"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the runtime", "the linker"},
+		},
 	},
 	{
 		Date: Date{2019, 4, 11}, Version: Version{1, 12, 4},
@@ -510,41 +625,49 @@
 	},
 	{
 		Date: Date{2019, 4, 5}, Version: Version{1, 12, 2},
-		Components: []template.HTML{"the compiler", "the go command", "the runtime"},
-		Packages:   []string{"doc", "net", "net/http/httputil", "os"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "the go command", "the runtime"},
+			Packages:   []string{"doc", "net", "net/http/httputil", "os"},
+		},
 	},
 	{
 		Date: Date{2019, 4, 5}, Version: Version{1, 11, 7},
-		Components: []template.HTML{"the runtime"},
-		Packages:   []string{"net"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the runtime"},
+			Packages:   []string{"net"},
+		},
 	},
 	{
 		Date: Date{2019, 3, 14}, Version: Version{1, 12, 1},
-		Components: []template.HTML{"cgo", "the compiler", "the go command"},
-		Packages:   []string{"fmt", "net/smtp", "os", "path/filepath", "sync", "text/template"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "the go command"},
+			Packages:   []string{"fmt", "net/smtp", "os", "path/filepath", "sync", "text/template"},
+		},
 	},
 	{
 		Date: Date{2019, 3, 14}, Version: Version{1, 11, 6},
-		Components: []template.HTML{"cgo", "the compiler", "linker", "runtime", "go command"},
-		Packages:   []string{"crypto/x509", "encoding/json", "net", "net/url"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "linker", "runtime", "go command"},
+			Packages:   []string{"crypto/x509", "encoding/json", "net", "net/url"},
+		},
 	},
 	{
 		Date: Date{2019, 2, 25}, Version: Version{1, 12, 0},
 	},
 	{
-		Date: Date{2019, 1, 23}, Version: Version{1, 11, 5}, Security: true,
-		Quantifier: "a",
-		Packages:   []string{"crypto/elliptic"},
+		Date: Date{2019, 1, 23}, Version: Version{1, 11, 5},
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"crypto/elliptic"}},
 	},
 	{
-		Date: Date{2019, 1, 23}, Version: Version{1, 10, 8}, Security: true,
-		Quantifier: "a",
-		Packages:   []string{"crypto/elliptic"},
+		Date: Date{2019, 1, 23}, Version: Version{1, 10, 8},
+		Security: &FixSummary{Quantifier: "a", Packages: []string{"crypto/elliptic"}},
 	},
 	{
 		Date: Date{2018, 12, 14}, Version: Version{1, 11, 4},
-		Components: []template.HTML{"cgo", "the compiler", "linker", "runtime", "documentation", "go command"},
-		Packages:   []string{"net/http", "go/types"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"cgo", "the compiler", "linker", "runtime", "documentation", "go command"},
+			Packages:   []string{"go/types", "net/http"},
+		},
 		More: `It includes a fix to a bug introduced in Go 1.11.3 that broke <code>go</code>
 <code>get</code> for import path patterns containing "<code>...</code>".`,
 	},
@@ -558,96 +681,123 @@
 Go 1.10.7 milestone</a> on our issue tracker for details.`,
 	},
 	{
-		Date: Date{2018, 12, 12}, Version: Version{1, 11, 3}, Security: true,
-		Quantifier: "three",
-		Components: []template.HTML{`"go get"`},
-		Packages:   []string{"crypto/x509"},
+		Date: Date{2018, 12, 12}, Version: Version{1, 11, 3},
+		Security: &FixSummary{
+			Quantifier: "three",
+			Components: []template.HTML{`"go get"`},
+			Packages:   []string{"crypto/x509"},
+		},
 	},
 	{
-		Date: Date{2018, 12, 12}, Version: Version{1, 10, 6}, Security: true,
-		Quantifier: "three",
-		Components: []template.HTML{`"go get"`},
-		Packages:   []string{"crypto/x509"},
-		More:       "It contains the same fixes as Go 1.11.3 and was released at the same time.",
+		Date: Date{2018, 12, 12}, Version: Version{1, 10, 6},
+		Security: &FixSummary{
+			Quantifier: "three",
+			Components: []template.HTML{`"go get"`},
+			Packages:   []string{"crypto/x509"},
+		},
+		More: "It contains the same fixes as Go 1.11.3 and was released at the same time.",
 	},
 	{
 		Date: Date{2018, 11, 2}, Version: Version{1, 11, 2},
-		Components: []template.HTML{"the compiler", "linker", "documentation", "go command"},
-		Packages:   []string{"database/sql", "go/types"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "documentation", "go command"},
+			Packages:   []string{"database/sql", "go/types"},
+		},
 	},
 	{
 		Date: Date{2018, 11, 2}, Version: Version{1, 10, 5},
-		Components: []template.HTML{"the go command", "linker", "runtime"},
-		Packages:   []string{"database/sql"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command", "linker", "runtime"},
+			Packages:   []string{"database/sql"},
+		},
 	},
 	{
 		Date: Date{2018, 10, 1}, Version: Version{1, 11, 1},
-		Components: []template.HTML{"the compiler", "documentation", "go command", "runtime"},
-		Packages:   []string{"crypto/x509", "encoding/json", "go/types", "net", "net/http", "reflect"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "documentation", "go command", "runtime"},
+			Packages:   []string{"crypto/x509", "encoding/json", "go/types", "net", "net/http", "reflect"},
+		},
 	},
 	{
 		Date: Date{2018, 8, 24}, Version: Version{1, 11, 0},
 	},
 	{
 		Date: Date{2018, 8, 24}, Version: Version{1, 10, 4},
-		Components: []template.HTML{"the go command", "linker"},
-		Packages:   []string{"net/http", "mime/multipart", "ld/macho", "bytes", "strings"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command", "linker"},
+			Packages:   []string{"bytes", "mime/multipart", "net/http", "strings"},
+		},
 	},
 	{
 		Date: Date{2018, 6, 5}, Version: Version{1, 10, 3},
-		Components: []template.HTML{"the go command"},
-		Packages:   []string{"crypto/tls", "crypto/x509", "strings"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command"},
+			Packages:   []string{"crypto/tls", "crypto/x509", "strings"},
+		},
 		More: `In particular, it adds <a href="https://go.googlesource.com/go/+/d4e21288e444d3ffd30d1a0737f15ea3fc3b8ad9">
 minimal support to the go command for the vgo transition</a>.`,
 	},
 	{
 		Date: Date{2018, 6, 5}, Version: Version{1, 9, 7},
-		Components: []template.HTML{"the go command"},
-		Packages:   []string{"crypto/x509", "strings"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the go command"},
+			Packages:   []string{"crypto/x509", "strings"},
+		},
 		More: `In particular, it adds <a href="https://go.googlesource.com/go/+/d4e21288e444d3ffd30d1a0737f15ea3fc3b8ad9">
 minimal support to the go command for the vgo transition</a>.`,
 	},
 	{
 		Date: Date{2018, 5, 1}, Version: Version{1, 10, 2},
-		Components: []template.HTML{"the compiler", "linker", "go command"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "go command"},
+		},
 	},
 	{
 		Date: Date{2018, 5, 1}, Version: Version{1, 9, 6},
-		Components: []template.HTML{"the compiler", "go command"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "go command"},
+		},
 	},
 	{
 		Date: Date{2018, 3, 28}, Version: Version{1, 10, 1},
-		Components: []template.HTML{"the compiler", "runtime"},
-		Packages:   []string{"archive/zip", "crypto/tls", "crypto/x509", "encoding/json", "net", "net/http", "net/http/pprof"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime"},
+			Packages:   []string{"archive/zip", "crypto/tls", "crypto/x509", "encoding/json", "net", "net/http", "net/http/pprof"},
+		},
 	},
 	{
 		Date: Date{2018, 3, 28}, Version: Version{1, 9, 5},
-		Components: []template.HTML{"the compiler", "go command"},
-		Packages:   []string{"net/http/pprof"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "go command"},
+			Packages:   []string{"net/http/pprof"},
+		},
 	},
 	{
 		Date: Date{2018, 2, 16}, Version: Version{1, 10, 0},
 	},
 	{
-		Date: Date{2018, 2, 7}, Version: Version{1, 9, 4}, Security: true,
-		Quantifier: "a",
-		Components: []template.HTML{`"go get"`},
+		Date: Date{2018, 2, 7}, Version: Version{1, 9, 4},
+		Security: &FixSummary{Quantifier: "a", Components: []template.HTML{`"go get"`}},
 	},
 	{
 		Date: Date{2018, 1, 22}, Version: Version{1, 9, 3},
-		Components: []template.HTML{"the compiler", "runtime"},
-		Packages:   []string{"database/sql", "math/big", "net/http", "net/url"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "runtime"},
+			Packages:   []string{"database/sql", "math/big", "net/http", "net/url"},
+		},
 	},
 	{
 		Date: Date{2017, 10, 25}, Version: Version{1, 9, 2},
-		Components: []template.HTML{"the compiler", "linker", "runtime", "documentation", "<code>go</code> command"},
-		Packages:   []string{"crypto/x509", "database/sql", "log", "net/smtp"},
+		Bug: &FixSummary{
+			Components: []template.HTML{"the compiler", "linker", "runtime", "documentation", "<code>go</code> command"},
+			Packages:   []string{"crypto/x509", "database/sql", "log", "net/smtp"},
+		},
 		More: `It includes a fix to a bug introduced in Go 1.9.1 that broke <code>go</code> <code>get</code>
 of non-Git repositories under certain conditions.`,
 	},
 	{
-		Date: Date{2017, 10, 4}, Version: Version{1, 9, 1}, Security: true,
-		Quantifier: "two",
+		Date: Date{2017, 10, 4}, Version: Version{1, 9, 1},
+		Security: &FixSummary{Quantifier: "two"},
 	},
 	{
 		Date: Date{2017, 8, 24}, Version: Version{1, 9, 0},
diff --git a/internal/history/release_test.go b/internal/history/release_test.go
index d0759ca..b323a2c 100644
--- a/internal/history/release_test.go
+++ b/internal/history/release_test.go
@@ -5,6 +5,7 @@
 package history
 
 import (
+	"sort"
 	"testing"
 	"time"
 )
@@ -36,5 +37,21 @@
 			t.Errorf("jumped from %v to %v", old, r.Version)
 		}
 		lastMinor[major] = r.Version.Z
+		if r.Security != nil {
+			if p := r.Security.Packages; !sort.StringsAreSorted(p) {
+				t.Errorf("version %v security fix packages out of order: %v vs %v", r.Version, p, sorted(p))
+			}
+		}
+		if r.Bug != nil {
+			if p := r.Bug.Packages; !sort.StringsAreSorted(p) {
+				t.Errorf("version %v bug fix packages out of order: %v vs %v", r.Version, p, sorted(p))
+			}
+		}
 	}
 }
+
+func sorted(s []string) []string {
+	s = append([]string(nil), s...)
+	sort.Strings(s)
+	return s
+}