diff --git a/metropolis/cli/metroctl/test/BUILD.bazel b/metropolis/cli/metroctl/test/BUILD.bazel
index 8f58a9a..edaa112 100644
--- a/metropolis/cli/metroctl/test/BUILD.bazel
+++ b/metropolis/cli/metroctl/test/BUILD.bazel
@@ -9,13 +9,12 @@
     rundir = ".",
     x_defs = {
         "xMetroctlPath": "$(rlocationpath //metropolis/cli/metroctl )",
+        "metropolisVersion": "{STABLE_MONOGON_metropolis_version}",
     },
     deps = [
         "//metropolis/test/launch",
         "//metropolis/test/util",
-        "//metropolis/version",
         "//osbase/cmd",
-        "//version",
         "@io_bazel_rules_go//go/runfiles",
     ],
 )
diff --git a/metropolis/cli/metroctl/test/main_test.go b/metropolis/cli/metroctl/test/main_test.go
index e1ca606..b853b82 100644
--- a/metropolis/cli/metroctl/test/main_test.go
+++ b/metropolis/cli/metroctl/test/main_test.go
@@ -16,12 +16,9 @@
 
 	"github.com/bazelbuild/rules_go/go/runfiles"
 
-	mversion "source.monogon.dev/metropolis/version"
-
 	mlaunch "source.monogon.dev/metropolis/test/launch"
 	"source.monogon.dev/metropolis/test/util"
 	"source.monogon.dev/osbase/cmd"
-	"source.monogon.dev/version"
 )
 
 var (
@@ -43,6 +40,9 @@
 	}
 }
 
+// This is filled at linking time.
+var metropolisVersion string
+
 // mctlRun starts metroctl, and waits till it exits. It returns nil, if the run
 // was successful.
 func mctlRun(t *testing.T, ctx context.Context, args []string) error {
@@ -279,7 +279,7 @@
 			if want, got := "yes", ontpm; want != got {
 				return fmt.Errorf("node tpm mismatch: wanted %q, got %q", want, got)
 			}
-			if want, got := version.Semver(mversion.Version), onver; want != got {
+			if want, got := metropolisVersion, onver; want != got {
 				return fmt.Errorf("node version mismatch: wanted %q, got %q", want, got)
 			}
 			if ontimeout < 0 || ontimeout > 30 {
diff --git a/metropolis/node/BUILD.bazel b/metropolis/node/BUILD.bazel
index f267957..60368ff 100644
--- a/metropolis/node/BUILD.bazel
+++ b/metropolis/node/BUILD.bazel
@@ -54,6 +54,9 @@
         "/init": "//metropolis/node/minit",
         "/core": "//metropolis/node/core",
 
+        # Product info
+        "/etc/product-info.json": ":product_info",
+
         # CA Certificate bundle & os-release & resolv.conf & hosts
         # These should not be explicitly used by Metropolis code and are only here for compatibility with
         # paths hardcoded by standard libraries (like Go's).
@@ -172,6 +175,7 @@
     os_name = "Metropolis Node",
     out_os_release = ":product_info_os_release",
     stamp_var = "STABLE_MONOGON_metropolis_version",
+    visibility = [":__subpackages__"],
 )
 
 go_test(
diff --git a/metropolis/node/core/BUILD.bazel b/metropolis/node/core/BUILD.bazel
index 4e0b3b8..de07e8c 100644
--- a/metropolis/node/core/BUILD.bazel
+++ b/metropolis/node/core/BUILD.bazel
@@ -30,20 +30,19 @@
         "//metropolis/node/core/metrics",
         "//metropolis/node/core/mgmt",
         "//metropolis/node/core/network",
+        "//metropolis/node/core/productinfo",
         "//metropolis/node/core/roleserve",
         "//metropolis/node/core/rpc/resolver",
         "//metropolis/node/core/tconsole",
         "//metropolis/node/core/time",
         "//metropolis/node/core/update",
         "//metropolis/proto/api",
-        "//metropolis/version",
         "//osbase/bringup",
         "//osbase/logtree",
         "//osbase/net/dns",
         "//osbase/supervisor",
         "//osbase/sysctl",
         "//osbase/tpm",
-        "//version",
         "@com_github_cenkalti_backoff_v4//:backoff",
         "@com_github_containerd_containerd_v2//client",
         "@com_github_containerd_containerd_v2//pkg/namespaces",
diff --git a/metropolis/node/core/main.go b/metropolis/node/core/main.go
index 890a30b..2d80698 100644
--- a/metropolis/node/core/main.go
+++ b/metropolis/node/core/main.go
@@ -17,19 +17,18 @@
 	"source.monogon.dev/metropolis/node/core/localstorage/declarative"
 	"source.monogon.dev/metropolis/node/core/metrics"
 	"source.monogon.dev/metropolis/node/core/network"
+	"source.monogon.dev/metropolis/node/core/productinfo"
 	"source.monogon.dev/metropolis/node/core/roleserve"
 	"source.monogon.dev/metropolis/node/core/rpc/resolver"
 	"source.monogon.dev/metropolis/node/core/tconsole"
 	timesvc "source.monogon.dev/metropolis/node/core/time"
 	"source.monogon.dev/metropolis/node/core/update"
-	mversion "source.monogon.dev/metropolis/version"
 	"source.monogon.dev/osbase/bringup"
 	"source.monogon.dev/osbase/logtree"
 	"source.monogon.dev/osbase/net/dns"
 	"source.monogon.dev/osbase/supervisor"
 	"source.monogon.dev/osbase/sysctl"
 	"source.monogon.dev/osbase/tpm"
-	"source.monogon.dev/version"
 )
 
 func main() {
@@ -95,8 +94,17 @@
 func root(ctx context.Context) error {
 	logger := supervisor.Logger(ctx)
 
-	logger.Info("Starting Metropolis node init")
-	logger.Infof("Version: %s", version.Semver(mversion.Version))
+	productInfo := productinfo.Get()
+	logger.Infof("Starting %s init", productInfo.Info.Name)
+	logger.Infof("Version: %s", productInfo.VersionString)
+	logger.Infof("Variant: %s", productInfo.Info.Variant)
+	if productInfo.Info.BuildTreeDirty {
+		logger.Warning("Build tree dirty")
+	}
+	if productInfo.Info.CommitHash != "" {
+		logger.Infof("Commit: %s", productInfo.Info.CommitHash)
+		logger.Infof("Commit date: %s", productInfo.HumanCommitDate)
+	}
 
 	// Linux kernel default is 4096 which is far too low. Raise it to 1M which
 	// is what gVisor suggests.
@@ -198,8 +206,15 @@
 
 	// Initialize interactive consoles.
 	interactiveConsoles := []string{"/dev/tty0"}
+	consoleConfig := tconsole.Config{
+		Terminal:    tconsole.TerminalLinux,
+		LogTree:     supervisor.LogTree(ctx),
+		Network:     &networkSvc.Status,
+		Roles:       &rs.LocalRoles,
+		CuratorConn: &rs.CuratorConnection,
+	}
 	for _, c := range interactiveConsoles {
-		console, err := tconsole.New(tconsole.TerminalLinux, c, supervisor.LogTree(ctx), &networkSvc.Status, &rs.LocalRoles, &rs.CuratorConnection)
+		console, err := tconsole.New(consoleConfig, c)
 		if err != nil {
 			logger.Infof("Failed to initialize interactive console at %s: %v", c, err)
 		} else {
diff --git a/metropolis/node/core/productinfo/BUILD.bazel b/metropolis/node/core/productinfo/BUILD.bazel
new file mode 100644
index 0000000..c34350e
--- /dev/null
+++ b/metropolis/node/core/productinfo/BUILD.bazel
@@ -0,0 +1,18 @@
+load("@io_bazel_rules_go//go:def.bzl", "go_library")
+
+go_library(
+    name = "productinfo",
+    srcs = ["productinfo.go"],
+    importpath = "source.monogon.dev/metropolis/node/core/productinfo",
+    visibility = [
+        "//metropolis/node/core:__subpackages__",
+        "//metropolis/node/kubernetes:__subpackages__",
+    ],
+    deps = [
+        "//osbase/oci/osimage",
+        "//version",
+        "//version/spec",
+        "@com_github_coreos_go_semver//semver",
+        "@io_bazel_rules_go//go/runfiles",
+    ],
+)
diff --git a/metropolis/node/core/productinfo/productinfo.go b/metropolis/node/core/productinfo/productinfo.go
new file mode 100644
index 0000000..5d66760
--- /dev/null
+++ b/metropolis/node/core/productinfo/productinfo.go
@@ -0,0 +1,147 @@
+// Copyright The Monogon Project Authors.
+// SPDX-License-Identifier: Apache-2.0
+
+package productinfo
+
+import (
+	"encoding/json"
+	"fmt"
+	"os"
+	"regexp"
+	"strconv"
+	"sync"
+	"time"
+
+	"github.com/bazelbuild/rules_go/go/runfiles"
+	"github.com/coreos/go-semver/semver"
+
+	vpb "source.monogon.dev/version/spec"
+
+	"source.monogon.dev/osbase/oci/osimage"
+	"source.monogon.dev/version"
+)
+
+// ProductInfo is a wrapper of [osimage.ProductInfo] with some additional
+// representations of the same data.
+type ProductInfo struct {
+	// Info is the product info parsed from JSON.
+	Info *osimage.ProductInfo
+	// Version parsed as [vpb.Version]
+	Version *vpb.Version
+	// VersionString is Info.Version with short commit and dirty indicator.
+	VersionString string
+	// HumanCommitDate is Info.CommitDate formatted to be more readable, in UTC.
+	// This is empty if stamping is disabled.
+	HumanCommitDate string
+}
+
+// path to the product info file. This may be replaced by x_defs in tests, and
+// will then be resolved with runfiles.
+var path = "/etc/product-info.json"
+
+// Get returns the product info of the running system.
+var Get = sync.OnceValue(func() *ProductInfo {
+	resolvedPath := path
+	if resolvedPath[0] != '/' {
+		var err error
+		resolvedPath, err = runfiles.Rlocation(resolvedPath)
+		if err != nil {
+			panic(err)
+		}
+	}
+	productInfo, err := read(resolvedPath)
+	if err != nil {
+		panic(err)
+	}
+	return productInfo
+})
+
+// read parses the JSON file at the given path as [osimage.ProductInfo].
+func read(path string) (*ProductInfo, error) {
+	rawProductInfo, err := os.ReadFile(path)
+	if err != nil {
+		return nil, err
+	}
+	var productInfo *osimage.ProductInfo
+	err = json.Unmarshal(rawProductInfo, &productInfo)
+	if err != nil {
+		return nil, err
+	}
+
+	specVersion, err := versionFromProductInfo(productInfo)
+	if err != nil {
+		return nil, fmt.Errorf("failed to extract version: %w", err)
+	}
+
+	var humanCommitDate string
+	if productInfo.CommitDate != "" {
+		commitDate, err := time.Parse(time.RFC3339, productInfo.CommitDate)
+		if err != nil {
+			return nil, fmt.Errorf("failed to parse commit date: %w", err)
+		}
+		humanCommitDate = commitDate.UTC().Format(time.DateTime)
+	}
+
+	info := &ProductInfo{
+		Info:            productInfo,
+		Version:         specVersion,
+		VersionString:   version.Semver(specVersion),
+		HumanCommitDate: humanCommitDate,
+	}
+	return info, nil
+}
+
+var rePrereleaseCommitOffset = regexp.MustCompile(`^dev([0-9]+)$`)
+
+func versionFromProductInfo(productInfo *osimage.ProductInfo) (*vpb.Version, error) {
+	version := &vpb.Version{}
+
+	if productInfo.CommitHash != "" {
+		if len(productInfo.CommitHash) < 8 {
+			return nil, fmt.Errorf("git commit hash too short")
+		}
+		buildTreeState := vpb.Version_GitInformation_BUILD_TREE_STATE_CLEAN
+		if productInfo.BuildTreeDirty {
+			buildTreeState = vpb.Version_GitInformation_BUILD_TREE_STATE_DIRTY
+		}
+		version.GitInformation = &vpb.Version_GitInformation{
+			CommitHash:     productInfo.CommitHash[:8],
+			BuildTreeState: buildTreeState,
+		}
+	}
+
+	if productInfo.Version != "" {
+		v, err := semver.NewVersion(productInfo.Version)
+		if err != nil {
+			return nil, fmt.Errorf("invalid %s version %q: %w", productInfo.ID, productInfo.Version, err)
+		}
+		// Parse prerelease strings (v1.2.3-foo-bar -> [foo, bar])
+		for _, el := range v.PreRelease.Slice() {
+			preCommitOffset := rePrereleaseCommitOffset.FindStringSubmatch(el)
+			switch {
+			case el == "":
+				// Skip empty slices which happens when there's a semver string with no
+				// prerelease data.
+			case el == "nostamp":
+				// Ignore field, we have it from CommitHash.
+			case preCommitOffset != nil:
+				offset, err := strconv.ParseUint(preCommitOffset[1], 10, 64)
+				if err != nil {
+					return nil, fmt.Errorf("invalid commit offset value: %w", err)
+				}
+				if version.GitInformation == nil {
+					return nil, fmt.Errorf("have git offset but no git commit")
+				}
+				version.GitInformation.CommitsSinceRelease = offset
+			default:
+				return nil, fmt.Errorf("invalid prerelease string %q (in %q)", el, productInfo.Version)
+			}
+		}
+		version.Release = &vpb.Version_Release{
+			Major: v.Major,
+			Minor: v.Minor,
+			Patch: v.Patch,
+		}
+	}
+	return version, nil
+}
diff --git a/metropolis/node/core/roleserve/BUILD.bazel b/metropolis/node/core/roleserve/BUILD.bazel
index 1fb4719..37ec6d1 100644
--- a/metropolis/node/core/roleserve/BUILD.bazel
+++ b/metropolis/node/core/roleserve/BUILD.bazel
@@ -30,6 +30,7 @@
         "//metropolis/node/core/mgmt",
         "//metropolis/node/core/network",
         "//metropolis/node/core/network/hostsfile",
+        "//metropolis/node/core/productinfo",
         "//metropolis/node/core/rpc",
         "//metropolis/node/core/rpc/resolver",
         "//metropolis/node/core/update",
@@ -38,7 +39,6 @@
         "//metropolis/node/kubernetes/pki",
         "//metropolis/proto/api",
         "//metropolis/proto/common",
-        "//metropolis/version",
         "//osbase/event",
         "//osbase/event/memory",
         "//osbase/logtree",
@@ -55,17 +55,23 @@
 go_test(
     name = "roleserve_test",
     srcs = ["worker_statuspush_test.go"],
+    data = [
+        "//metropolis/node:product_info",
+    ],
     embed = [":roleserve"],
     # TODO: https://github.com/monogon-dev/monogon/issues/250
     flaky = True,
+    x_defs = {
+        "source.monogon.dev/metropolis/node/core/productinfo.path": "$(rlocationpath //metropolis/node:product_info )",
+    },
     deps = [
         "//metropolis/node",
         "//metropolis/node/core/consensus",
         "//metropolis/node/core/curator",
         "//metropolis/node/core/curator/proto/api",
+        "//metropolis/node/core/productinfo",
         "//metropolis/proto/common",
         "//metropolis/test/util",
-        "//metropolis/version",
         "//osbase/supervisor",
         "@com_github_cenkalti_backoff_v4//:backoff",
         "@com_github_google_go_cmp//cmp",
diff --git a/metropolis/node/core/roleserve/worker_statuspush.go b/metropolis/node/core/roleserve/worker_statuspush.go
index 0557b4c..62355bc 100644
--- a/metropolis/node/core/roleserve/worker_statuspush.go
+++ b/metropolis/node/core/roleserve/worker_statuspush.go
@@ -14,7 +14,7 @@
 
 	common "source.monogon.dev/metropolis/node"
 	"source.monogon.dev/metropolis/node/core/network"
-	"source.monogon.dev/metropolis/version"
+	"source.monogon.dev/metropolis/node/core/productinfo"
 	"source.monogon.dev/osbase/event"
 	"source.monogon.dev/osbase/event/memory"
 	"source.monogon.dev/osbase/supervisor"
@@ -64,7 +64,7 @@
 // workerStatusPushChannels.
 func workerStatusPushLoop(ctx context.Context, chans *workerStatusPushChannels) error {
 	status := cpb.NodeStatus{
-		Version: version.Version,
+		Version: productinfo.Get().Version,
 		BootId:  getBootID(ctx),
 	}
 
diff --git a/metropolis/node/core/roleserve/worker_statuspush_test.go b/metropolis/node/core/roleserve/worker_statuspush_test.go
index 78c5f9c..40764f2 100644
--- a/metropolis/node/core/roleserve/worker_statuspush_test.go
+++ b/metropolis/node/core/roleserve/worker_statuspush_test.go
@@ -21,8 +21,8 @@
 	common "source.monogon.dev/metropolis/node"
 	"source.monogon.dev/metropolis/node/core/consensus"
 	"source.monogon.dev/metropolis/node/core/curator"
+	"source.monogon.dev/metropolis/node/core/productinfo"
 	"source.monogon.dev/metropolis/test/util"
-	mversion "source.monogon.dev/metropolis/version"
 	"source.monogon.dev/osbase/supervisor"
 
 	ipb "source.monogon.dev/metropolis/node/core/curator/proto/api"
@@ -86,6 +86,9 @@
 	getBootID = func(ctx context.Context) []byte {
 		return []byte{1, 2, 3}
 	}
+
+	productInfo := productinfo.Get()
+
 	chans := workerStatusPushChannels{
 		address:           make(chan string),
 		localControlPlane: make(chan *localControlPlane),
@@ -135,7 +138,7 @@
 	cur.expectReports(t, []*ipb.UpdateNodeStatusRequest{
 		{NodeId: nodeID, Status: &cpb.NodeStatus{
 			ExternalAddress: "192.0.2.10",
-			Version:         mversion.Version,
+			Version:         productInfo.Version,
 			BootId:          []byte{1, 2, 3},
 		}},
 	})
@@ -146,12 +149,12 @@
 	cur.expectReports(t, []*ipb.UpdateNodeStatusRequest{
 		{NodeId: nodeID, Status: &cpb.NodeStatus{
 			ExternalAddress: "192.0.2.10",
-			Version:         mversion.Version,
+			Version:         productInfo.Version,
 			BootId:          []byte{1, 2, 3},
 		}},
 		{NodeId: nodeID, Status: &cpb.NodeStatus{
 			ExternalAddress: "192.0.2.11",
-			Version:         mversion.Version,
+			Version:         productInfo.Version,
 			BootId:          []byte{1, 2, 3},
 		}},
 	})
@@ -168,12 +171,12 @@
 	cur.expectReports(t, []*ipb.UpdateNodeStatusRequest{
 		{NodeId: nodeID, Status: &cpb.NodeStatus{
 			ExternalAddress: "192.0.2.10",
-			Version:         mversion.Version,
+			Version:         productInfo.Version,
 			BootId:          []byte{1, 2, 3},
 		}},
 		{NodeId: nodeID, Status: &cpb.NodeStatus{
 			ExternalAddress: "192.0.2.11",
-			Version:         mversion.Version,
+			Version:         productInfo.Version,
 			BootId:          []byte{1, 2, 3},
 		}},
 		{NodeId: nodeID, Status: &cpb.NodeStatus{
@@ -181,12 +184,12 @@
 			RunningCurator: &cpb.NodeStatus_RunningCurator{
 				Port: int32(common.CuratorServicePort),
 			},
-			Version: mversion.Version,
+			Version: productInfo.Version,
 			BootId:  []byte{1, 2, 3},
 		}},
 		{NodeId: nodeID, Status: &cpb.NodeStatus{
 			ExternalAddress: "192.0.2.11",
-			Version:         mversion.Version,
+			Version:         productInfo.Version,
 			BootId:          []byte{1, 2, 3},
 		}},
 	})
diff --git a/metropolis/node/core/tconsole/BUILD.bazel b/metropolis/node/core/tconsole/BUILD.bazel
index f67e9b9..c551760 100644
--- a/metropolis/node/core/tconsole/BUILD.bazel
+++ b/metropolis/node/core/tconsole/BUILD.bazel
@@ -17,13 +17,12 @@
     visibility = ["//visibility:public"],
     deps = [
         "//metropolis/node/core/network",
+        "//metropolis/node/core/productinfo",
         "//metropolis/node/core/roleserve",
         "//metropolis/proto/common",
-        "//metropolis/version",
         "//osbase/event",
         "//osbase/logtree",
         "//osbase/supervisor",
-        "//version",
         "@com_github_gdamore_tcell_v2//:tcell",
         "@com_github_rivo_uniseg//:uniseg",
     ],
diff --git a/metropolis/node/core/tconsole/page_status.go b/metropolis/node/core/tconsole/page_status.go
index 7a139ac..482dd6e 100644
--- a/metropolis/node/core/tconsole/page_status.go
+++ b/metropolis/node/core/tconsole/page_status.go
@@ -10,8 +10,7 @@
 
 	"github.com/gdamore/tcell/v2"
 
-	mversion "source.monogon.dev/metropolis/version"
-	"source.monogon.dev/version"
+	"source.monogon.dev/metropolis/node/core/productinfo"
 )
 
 //go:embed build/copyright_line.txt
@@ -49,13 +48,27 @@
 	splitH := split(c.width, logoWidth, 60)
 
 	// Status lines.
+	productInfo := productinfo.Get()
 	lines := []string{
-		fmt.Sprintf("Version: %s", version.Semver(mversion.Version)),
+		fmt.Sprintf("Version: %s", productInfo.VersionString),
+		fmt.Sprintf("Variant: %s", productInfo.Info.Variant),
+	}
+	if productInfo.Info.BuildTreeDirty {
+		lines = append(lines, "Build tree dirty")
+	}
+	if productInfo.Info.CommitHash != "" {
+		lines = append(lines,
+			fmt.Sprintf("Commit: %s", productInfo.Info.CommitHash),
+			fmt.Sprintf("Commit date: %s", productInfo.HumanCommitDate),
+		)
+	}
+	lines = append(lines,
+		"", // Blank line between product info and node info.
 		fmt.Sprintf("Node ID: %s", d.id),
 		fmt.Sprintf("CA fingerprint: %s", d.fingerprint),
 		fmt.Sprintf("Management address: %s", d.netAddr),
 		fmt.Sprintf("Roles: %s", d.roles),
-	}
+	)
 	// Calculate longest line.
 	maxLine := 0
 	for _, l := range lines {
diff --git a/metropolis/node/core/tconsole/standalone/BUILD.bazel b/metropolis/node/core/tconsole/standalone/BUILD.bazel
index bc48d04..e9ed29a 100644
--- a/metropolis/node/core/tconsole/standalone/BUILD.bazel
+++ b/metropolis/node/core/tconsole/standalone/BUILD.bazel
@@ -3,8 +3,14 @@
 go_library(
     name = "standalone_lib",
     srcs = ["main.go"],
+    data = [
+        "//metropolis/node:product_info",
+    ],
     importpath = "source.monogon.dev/metropolis/node/core/tconsole/standalone",
     visibility = ["//visibility:private"],
+    x_defs = {
+        "source.monogon.dev/metropolis/node/core/productinfo.path": "$(rlocationpath //metropolis/node:product_info )",
+    },
     deps = [
         "//metropolis/node/core/network",
         "//metropolis/node/core/roleserve",
diff --git a/metropolis/node/core/tconsole/standalone/main.go b/metropolis/node/core/tconsole/standalone/main.go
index d9ceb18..eaf2c47 100644
--- a/metropolis/node/core/tconsole/standalone/main.go
+++ b/metropolis/node/core/tconsole/standalone/main.go
@@ -33,8 +33,14 @@
 	var curV memory.Value[*roleserve.CuratorConnection]
 
 	lt := logtree.New()
-
-	tc, err := tconsole.New(tconsole.TerminalGeneric, "/proc/self/fd/0", lt, &netV, &rolesV, &curV)
+	config := tconsole.Config{
+		Terminal:    tconsole.TerminalGeneric,
+		LogTree:     lt,
+		Network:     &netV,
+		Roles:       &rolesV,
+		CuratorConn: &curV,
+	}
+	tc, err := tconsole.New(config, "/proc/self/fd/0")
 	if err != nil {
 		log.Fatalf("tconsole.New: %v", err)
 	}
@@ -98,7 +104,7 @@
 		supervisor.Signal(ctx, supervisor.SignalHealthy)
 		<-ctx.Done()
 		return ctx.Err()
-	}, supervisor.WithExistingLogtree(lt))
+	}, supervisor.WithExistingLogtree(lt), supervisor.WithPropagatePanic)
 	<-ctx.Done()
 	tc.Cleanup()
 }
diff --git a/metropolis/node/core/tconsole/tconsole.go b/metropolis/node/core/tconsole/tconsole.go
index aa3df7b..eeb4536 100644
--- a/metropolis/node/core/tconsole/tconsole.go
+++ b/metropolis/node/core/tconsole/tconsole.go
@@ -21,12 +21,19 @@
 	"source.monogon.dev/osbase/supervisor"
 )
 
+type Config struct {
+	Terminal    Terminal
+	LogTree     *logtree.LogTree
+	Network     event.Value[*network.Status]
+	Roles       event.Value[*cpb.NodeRoles]
+	CuratorConn event.Value[*roleserve.CuratorConnection]
+}
+
 // Console is a Terminal Console (TConsole), a user-interactive informational
 // display visible on the TTY of a running Metropolis instance.
 type Console struct {
 	// Quit will be closed when the user press CTRL-C. A new channel will be created
 	// on each New call.
-
 	Quit    chan struct{}
 	ttyPath string
 	tty     tcell.Tty
@@ -39,10 +46,8 @@
 	// constructed dynamically in Run.
 	activePage int
 
-	reader      *logtree.LogReader
-	network     event.Value[*network.Status]
-	roles       event.Value[*cpb.NodeRoles]
-	curatorConn event.Value[*roleserve.CuratorConnection]
+	config Config
+	reader *logtree.LogReader
 }
 
 // New creates a new Console, taking over the TTY at the given path. The given
@@ -51,8 +56,8 @@
 //
 // network, roles, curatorConn point to various Metropolis subsystems that are
 // used to populate the console data.
-func New(terminal Terminal, ttyPath string, lt *logtree.LogTree, network event.Value[*network.Status], roles event.Value[*cpb.NodeRoles], curatorConn event.Value[*roleserve.CuratorConnection]) (*Console, error) {
-	reader, err := lt.Read("", logtree.WithChildren(), logtree.WithStream())
+func New(config Config, ttyPath string) (*Console, error) {
+	reader, err := config.LogTree.Read("", logtree.WithChildren(), logtree.WithStream())
 	if err != nil {
 		return nil, fmt.Errorf("lt.Read: %w", err)
 	}
@@ -71,7 +76,7 @@
 	screen.SetStyle(tcell.StyleDefault)
 
 	var pal palette
-	switch terminal {
+	switch config.Terminal {
 	case TerminalLinux:
 		pal = paletteLinux
 		tty.Write([]byte(pal.setupLinuxConsole()))
@@ -87,14 +92,11 @@
 		screen:     screen,
 		width:      width,
 		height:     height,
-		network:    network,
 		palette:    pal,
 		Quit:       make(chan struct{}),
 		activePage: 0,
+		config:     config,
 		reader:     reader,
-
-		roles:       roles,
-		curatorConn: curatorConn,
 	}, nil
 }
 
@@ -131,13 +133,13 @@
 	netAddrC := make(chan *network.Status)
 	rolesC := make(chan *cpb.NodeRoles)
 	curatorConnC := make(chan *roleserve.CuratorConnection)
-	if err := supervisor.Run(ctx, "netpipe", event.Pipe(c.network, netAddrC)); err != nil {
+	if err := supervisor.Run(ctx, "netpipe", event.Pipe(c.config.Network, netAddrC)); err != nil {
 		return err
 	}
-	if err := supervisor.Run(ctx, "rolespipe", event.Pipe(c.roles, rolesC)); err != nil {
+	if err := supervisor.Run(ctx, "rolespipe", event.Pipe(c.config.Roles, rolesC)); err != nil {
 		return err
 	}
-	if err := supervisor.Run(ctx, "curatorpipe", event.Pipe(c.curatorConn, curatorConnC)); err != nil {
+	if err := supervisor.Run(ctx, "curatorpipe", event.Pipe(c.config.CuratorConn, curatorConnC)); err != nil {
 		return err
 	}
 	supervisor.Signal(ctx, supervisor.SignalHealthy)
diff --git a/metropolis/node/core/update/BUILD.bazel b/metropolis/node/core/update/BUILD.bazel
index 532b917..0ce75b4 100644
--- a/metropolis/node/core/update/BUILD.bazel
+++ b/metropolis/node/core/update/BUILD.bazel
@@ -11,8 +11,8 @@
     deps = [
         "//go/logging",
         "//metropolis/node/abloader/spec",
+        "//metropolis/node/core/productinfo",
         "//metropolis/proto/api",
-        "//metropolis/version",
         "//osbase/blockdev",
         "//osbase/build/mkimage/osimage",
         "//osbase/efivarfs",
@@ -20,7 +20,6 @@
         "//osbase/kexec",
         "//osbase/oci/osimage",
         "//osbase/oci/registry",
-        "//version",
         "@com_github_cenkalti_backoff_v4//:backoff",
         "@org_golang_google_grpc//codes",
         "@org_golang_google_grpc//status",
diff --git a/metropolis/node/core/update/e2e/testos/testos.bzl b/metropolis/node/core/update/e2e/testos/testos.bzl
index c59af8c..b0665c0 100644
--- a/metropolis/node/core/update/e2e/testos/testos.bzl
+++ b/metropolis/node/core/update/e2e/testos/testos.bzl
@@ -12,6 +12,7 @@
         name = "rootfs_" + variant,
         files = {
             "/init": ":testos_" + variant,
+            "/etc/product-info.json": ":product_info_" + variant,
             "/etc/resolv.conf": "//osbase/net/dns:resolv.conf",
         },
         fsspecs = [
diff --git a/metropolis/node/core/update/update.go b/metropolis/node/core/update/update.go
index 53bcb96..d620677 100644
--- a/metropolis/node/core/update/update.go
+++ b/metropolis/node/core/update/update.go
@@ -26,7 +26,7 @@
 	"google.golang.org/protobuf/proto"
 
 	"source.monogon.dev/go/logging"
-	mversion "source.monogon.dev/metropolis/version"
+	"source.monogon.dev/metropolis/node/core/productinfo"
 	"source.monogon.dev/osbase/blockdev"
 	"source.monogon.dev/osbase/build/mkimage/osimage"
 	"source.monogon.dev/osbase/efivarfs"
@@ -34,7 +34,6 @@
 	"source.monogon.dev/osbase/kexec"
 	ociosimage "source.monogon.dev/osbase/oci/osimage"
 	"source.monogon.dev/osbase/oci/registry"
-	"source.monogon.dev/version"
 
 	abloaderpb "source.monogon.dev/metropolis/node/abloader/spec"
 	apb "source.monogon.dev/metropolis/proto/api"
@@ -284,7 +283,7 @@
 		RetryNotify: func(err error, d time.Duration) {
 			s.Logger.Warningf("Error while fetching OS image, retrying in %v: %v", d, err)
 		},
-		UserAgent:  "MonogonOS/" + version.Semver(mversion.Version),
+		UserAgent:  "MonogonOS/" + productinfo.Get().VersionString,
 		Scheme:     imageRef.Scheme,
 		Host:       imageRef.Host,
 		Repository: imageRef.Repository,
diff --git a/metropolis/node/kubernetes/reconciler/BUILD.bazel b/metropolis/node/kubernetes/reconciler/BUILD.bazel
index 3e66db3..caac358 100644
--- a/metropolis/node/kubernetes/reconciler/BUILD.bazel
+++ b/metropolis/node/kubernetes/reconciler/BUILD.bazel
@@ -16,7 +16,7 @@
         "//metropolis/node/core/consensus/client",
         "//metropolis/node/core/curator",
         "//metropolis/node/core/curator/proto/private",
-        "//metropolis/version",
+        "//metropolis/node/core/productinfo",
         "//osbase/event/etcd",
         "//osbase/event/memory",
         "//osbase/supervisor",
@@ -46,13 +46,19 @@
         "reconciler_status_test.go",
         "reconciler_test.go",
     ],
+    data = [
+        "//metropolis/node:product_info",
+    ],
     embed = [":reconciler"],
+    x_defs = {
+        "source.monogon.dev/metropolis/node/core/productinfo.path": "$(rlocationpath //metropolis/node:product_info )",
+    },
     deps = [
         "//metropolis/node/core/consensus/client",
         "//metropolis/node/core/curator",
         "//metropolis/node/core/curator/proto/private",
+        "//metropolis/node/core/productinfo",
         "//metropolis/proto/common",
-        "//metropolis/version",
         "//osbase/supervisor",
         "//version",
         "//version/spec",
diff --git a/metropolis/node/kubernetes/reconciler/reconciler_status.go b/metropolis/node/kubernetes/reconciler/reconciler_status.go
index b516207..914e4c2 100644
--- a/metropolis/node/kubernetes/reconciler/reconciler_status.go
+++ b/metropolis/node/kubernetes/reconciler/reconciler_status.go
@@ -19,7 +19,7 @@
 	"source.monogon.dev/metropolis/node/core/consensus/client"
 	"source.monogon.dev/metropolis/node/core/curator"
 	ppb "source.monogon.dev/metropolis/node/core/curator/proto/private"
-	mversion "source.monogon.dev/metropolis/version"
+	"source.monogon.dev/metropolis/node/core/productinfo"
 	"source.monogon.dev/osbase/event/etcd"
 	"source.monogon.dev/osbase/event/memory"
 	"source.monogon.dev/osbase/supervisor"
@@ -69,8 +69,8 @@
 
 // WaitReady watches the reconciler status and returns once initial
 // reconciliation is done and the reconciled state is compatible.
-func WaitReady(ctx context.Context, etcdClient client.Namespaced) error {
-	value := etcd.NewValue(etcdClient, statusKey, func(_, data []byte) (*ppb.KubernetesReconcilerStatus, error) {
+func (s *Service) WaitReady(ctx context.Context) error {
+	value := etcd.NewValue(s.Etcd, statusKey, func(_, data []byte) (*ppb.KubernetesReconcilerStatus, error) {
 		status := &ppb.KubernetesReconcilerStatus{}
 		if err := proto.Unmarshal(data, status); err != nil {
 			return nil, fmt.Errorf("could not unmarshal: %w", err)
@@ -98,11 +98,11 @@
 			state,
 			version.Semver(status.Version),
 			version.Release(status.MinimumCompatibleRelease),
-			version.Semver(mversion.Version),
+			version.Semver(productinfo.Get().Version),
 			version.Release(minReconcilerRelease),
 		)
 
-		if version.ReleaseLessThan(mversion.Version.Release, status.MinimumCompatibleRelease) {
+		if version.ReleaseLessThan(productinfo.Get().Version.Release, status.MinimumCompatibleRelease) {
 			supervisor.Logger(ctx).Info("Not ready, because the local node release is below the reconciler minimum compatible release. Waiting for status change.")
 			continue
 		}
@@ -218,8 +218,8 @@
 	}
 
 	publish := func() {
-		minRelease := mversion.Version.Release
-		maxRelease := mversion.Version.Release
+		minRelease := productinfo.Get().Version.Release
+		maxRelease := productinfo.Get().Version.Release
 		for _, release := range releaseStruct {
 			if version.ReleaseLessThan(release, minRelease) {
 				minRelease = release
@@ -275,7 +275,7 @@
 		return err
 	}
 
-	shouldRun := !version.ReleaseLessThan(mversion.Version.Release, r.maxRelease)
+	shouldRun := !version.ReleaseLessThan(productinfo.Get().Version.Release, r.maxRelease)
 	if shouldRun {
 		supervisor.Logger(ctx).Info("This Kubernetes controller node has the latest release, starting election.")
 		err := supervisor.Run(ctx, "elect", s.elect)
@@ -293,7 +293,7 @@
 		if err != nil {
 			return err
 		}
-		shouldRunNow := !version.ReleaseLessThan(mversion.Version.Release, r.maxRelease)
+		shouldRunNow := !version.ReleaseLessThan(productinfo.Get().Version.Release, r.maxRelease)
 		if shouldRunNow != shouldRun {
 			return errors.New("latest release changed, restarting")
 		}
@@ -360,7 +360,7 @@
 
 	doneStatus := &ppb.KubernetesReconcilerStatus{
 		State:                    ppb.KubernetesReconcilerStatus_STATE_DONE,
-		Version:                  mversion.Version,
+		Version:                  productinfo.Get().Version,
 		MinimumCompatibleRelease: minApiserverRelease,
 	}
 	doneStatusBytes, err := proto.Marshal(doneStatus)
@@ -374,7 +374,7 @@
 	} else if proto.Equal(status, doneStatus) {
 		// The status is already what we would set, so leave it as is.
 		log.Info("Status is already up to date.")
-	} else if !version.ReleaseLessThan(mversion.Version.Release, status.Version.Release) &&
+	} else if !version.ReleaseLessThan(productinfo.Get().Version.Release, status.Version.Release) &&
 		!version.ReleaseLessThan(status.MinimumCompatibleRelease, minApiserverRelease) {
 		// The status does not allow apiservers to start serving which would be
 		// incompatible after we reconcile. So just set the state to working.
@@ -408,8 +408,8 @@
 		log.Info("Status allows incompatible releases, need to restrict.")
 
 		status.State = ppb.KubernetesReconcilerStatus_STATE_WORKING
-		if !version.ReleaseLessThan(status.Version.Release, mversion.Version.Release) {
-			status.Version = mversion.Version
+		if !version.ReleaseLessThan(status.Version.Release, productinfo.Get().Version.Release) {
+			status.Version = productinfo.Get().Version
 		}
 		if version.ReleaseLessThan(status.MinimumCompatibleRelease, minApiserverRelease) {
 			status.MinimumCompatibleRelease = minApiserverRelease
@@ -428,7 +428,7 @@
 			if err != nil {
 				return err
 			}
-			if version.ReleaseLessThan(mversion.Version.Release, releases.maxRelease) {
+			if version.ReleaseLessThan(productinfo.Get().Version.Release, releases.maxRelease) {
 				// We will likely get canceled soon by watchReleases restarting, unless
 				// this is a very short transient that is not noticed by watchReleases.
 				continue
diff --git a/metropolis/node/kubernetes/reconciler/reconciler_status_test.go b/metropolis/node/kubernetes/reconciler/reconciler_status_test.go
index f9d839f..1f17e69 100644
--- a/metropolis/node/kubernetes/reconciler/reconciler_status_test.go
+++ b/metropolis/node/kubernetes/reconciler/reconciler_status_test.go
@@ -15,26 +15,28 @@
 	"source.monogon.dev/metropolis/node/core/consensus/client"
 	"source.monogon.dev/metropolis/node/core/curator"
 	ppb "source.monogon.dev/metropolis/node/core/curator/proto/private"
+	"source.monogon.dev/metropolis/node/core/productinfo"
 	cpb "source.monogon.dev/metropolis/proto/common"
-	mversion "source.monogon.dev/metropolis/version"
 	"source.monogon.dev/osbase/supervisor"
 	"source.monogon.dev/version"
 	vpb "source.monogon.dev/version/spec"
 )
 
+var productInfo = productinfo.Get()
+
 // TestMinimumReleasesNotAboveMetropolisRelease tests that minimum releases
 // are not above the metropolis release itself, because that would cause
 // things to get stuck.
 func TestMinimumReleasesNotAboveMetropolisRelease(t *testing.T) {
-	if version.ReleaseLessThan(mversion.Version.Release, minReconcilerRelease) {
+	if version.ReleaseLessThan(productInfo.Version.Release, minReconcilerRelease) {
 		t.Errorf("Metropolis release %s is below the minimum reconciler release %s",
-			version.Semver(mversion.Version),
+			version.Semver(productInfo.Version),
 			version.Release(minReconcilerRelease),
 		)
 	}
-	if version.ReleaseLessThan(mversion.Version.Release, minApiserverRelease) {
+	if version.ReleaseLessThan(productInfo.Version.Release, minApiserverRelease) {
 		t.Errorf("Metropolis release %s is below the minimum apiserver release %s",
-			version.Semver(mversion.Version),
+			version.Semver(productInfo.Version),
 			version.Release(minApiserverRelease),
 		)
 	}
@@ -115,10 +117,13 @@
 // will time out if WaitReady fails to return when it is supposed to.
 func TestWaitReady(t *testing.T) {
 	cl := startEtcd(t)
+	s := Service{
+		Etcd: cl,
+	}
 
 	isReady := make(chan struct{})
 	supervisor.TestHarness(t, func(ctx context.Context) error {
-		err := WaitReady(ctx, cl)
+		err := s.WaitReady(ctx)
 		if err != nil {
 			t.Error(err)
 		}
@@ -163,7 +168,7 @@
 		Version: &vpb.Version{
 			Release: &vpb.Version_Release{Major: 10000, Minor: 0, Patch: 0},
 		},
-		MinimumCompatibleRelease: mversion.Version.Release,
+		MinimumCompatibleRelease: productInfo.Version.Release,
 	})
 
 	<-isReady
@@ -263,7 +268,7 @@
 	waitForActions := func() {
 		isReady := make(chan struct{})
 		supervisor.TestHarness(t, func(ctx context.Context) error {
-			err := WaitReady(ctx, cl)
+			err := s.WaitReady(ctx)
 			if err != nil {
 				t.Error(err)
 			}
diff --git a/metropolis/node/kubernetes/service_controller.go b/metropolis/node/kubernetes/service_controller.go
index b91c455..cd9fdbf 100644
--- a/metropolis/node/kubernetes/service_controller.go
+++ b/metropolis/node/kubernetes/service_controller.go
@@ -162,7 +162,7 @@
 	// starting the scheduler/controller-manager/etc just to get them to immediately
 	// fail and back off with 'unauthorized'.
 	supervisor.Logger(ctx).Info("Waiting for reconciler...")
-	err = reconciler.WaitReady(ctx, etcd)
+	err = reconcilerService.WaitReady(ctx)
 	if err != nil {
 		return fmt.Errorf("while waiting for reconciler: %w", err)
 	}
diff --git a/metropolis/version/BUILD.bazel b/metropolis/version/BUILD.bazel
deleted file mode 100644
index 40a0991..0000000
--- a/metropolis/version/BUILD.bazel
+++ /dev/null
@@ -1,19 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library")
-load("//version:defs.bzl", "go_version_library")
-
-go_version_library(
-    name = "version_lib",
-    importpath = "source.monogon.dev/metropolis/version",
-    product = "metropolis",
-)
-
-go_library(
-    name = "version",
-    embed = [
-        ":version_lib",  # keep
-    ],
-    importpath = "source.monogon.dev/metropolis/version",  # keep
-    visibility = [
-        "//metropolis:__subpackages__",
-    ],
-)
diff --git a/metropolis/version/gomod-generated-placeholder.go b/metropolis/version/gomod-generated-placeholder.go
deleted file mode 100644
index 7b00a96..0000000
--- a/metropolis/version/gomod-generated-placeholder.go
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright The Monogon Project Authors.
-// SPDX-License-Identifier: Apache-2.0
-
-package version
diff --git a/version/defs.bzl b/version/defs.bzl
deleted file mode 100644
index 671bc54..0000000
--- a/version/defs.bzl
+++ /dev/null
@@ -1,77 +0,0 @@
-load(
-    "@io_bazel_rules_go//go:def.bzl",
-    "go_context",
-)
-
-def _go_version_library_impl(ctx):
-    output = ctx.actions.declare_file(ctx.attr.name + "_generated.go")
-
-    ctx.actions.run(
-        mnemonic = "GenVersion",
-        progress_message = "Generating version file",
-        inputs = [ctx.info_file],
-        outputs = [output],
-        executable = ctx.executable._genversion,
-        arguments = [
-            "-importpath",
-            ctx.attr.importpath,
-            "-product",
-            ctx.attr.product,
-            "-status_file",
-            ctx.info_file.path,
-            "-out_file",
-            output.path,
-        ],
-    )
-
-    go = go_context(ctx)
-    source_files = [output]
-    library = go.new_library(
-        go,
-        srcs = source_files,
-    )
-    source = go.library_to_source(go, ctx.attr, library, False)
-    providers = [library, source]
-    output_groups = {
-        "go_generated_srcs": source_files,
-    }
-    return providers + [OutputGroupInfo(**output_groups)]
-
-go_version_library = rule(
-    doc = """
-        Generate a Go library target which can be further embedded/depended upon
-        by other Go code. This library contains a Version proto field which will
-        be automatically populated with version based on build state data.
-    """,
-    implementation = _go_version_library_impl,
-    attrs = {
-        "importpath": attr.string(
-            mandatory = True,
-        ),
-        "product": attr.string(
-            mandatory = True,
-            doc = """
-                Name of Monogon product that for which this version library will
-                be generated. This must correspond to the product name as used in
-                Git tags, which in turn is used to extract a release version
-                during a build.
-            """,
-        ),
-        "_genversion": attr.label(
-            default = Label("//version/stampgo"),
-            cfg = "exec",
-            executable = True,
-            allow_files = True,
-        ),
-        "_go_context_data": attr.label(
-            default = "@io_bazel_rules_go//:go_context_data",
-        ),
-        "deps": attr.label_list(
-            default = [
-                "@org_golang_google_protobuf//proto",
-                "//version/spec",
-            ],
-        ),
-    },
-    toolchains = ["@io_bazel_rules_go//go:toolchain"],
-)
diff --git a/version/stampgo/BUILD.bazel b/version/stampgo/BUILD.bazel
deleted file mode 100644
index cbcca39..0000000
--- a/version/stampgo/BUILD.bazel
+++ /dev/null
@@ -1,19 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
-
-go_library(
-    name = "stampgo_lib",
-    srcs = ["main.go"],
-    importpath = "source.monogon.dev/version/stampgo",
-    visibility = ["//visibility:private"],
-    deps = [
-        "//version/spec",
-        "@com_github_coreos_go_semver//semver",
-        "@org_golang_google_protobuf//proto",
-    ],
-)
-
-go_binary(
-    name = "stampgo",
-    embed = [":stampgo_lib"],
-    visibility = ["//visibility:public"],
-)
diff --git a/version/stampgo/main.go b/version/stampgo/main.go
deleted file mode 100644
index 439dca5..0000000
--- a/version/stampgo/main.go
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright The Monogon Project Authors.
-// SPDX-License-Identifier: Apache-2.0
-
-// Package main implements 'stampgo', a tool to convert build status data into a
-// version.spec.Version proto, which is then embedded into a Go source file.
-package main
-
-import (
-	"bufio"
-	"flag"
-	"fmt"
-	"log"
-	"os"
-	"regexp"
-	"strconv"
-	"strings"
-
-	"github.com/coreos/go-semver/semver"
-	"google.golang.org/protobuf/proto"
-
-	"source.monogon.dev/version/spec"
-)
-
-var (
-	flagStatusFile string
-	flagOutFile    string
-	flagImportpath string
-	flagProduct    string
-)
-
-var (
-	rePrereleaseCommitOffset = regexp.MustCompile(`^dev([0-9]+)$`)
-	rePrereleaseGitHash      = regexp.MustCompile(`^g[0-9a-f]+$`)
-)
-
-func init() {
-	flag.StringVar(&flagStatusFile, "status_file", "", "path to bazel workspace status file")
-	flag.StringVar(&flagOutFile, "out_file", "version.go", "path to os-release output file")
-	flag.StringVar(&flagImportpath, "importpath", "", "importpath of generated source")
-	flag.StringVar(&flagProduct, "product", "", "product name within the monogon source tree")
-}
-
-// parseStatusFile reads and parses a Bazel build status file and returns
-// a string -> string map based on its contents.
-func parseStatusFile(path string) (map[string]string, error) {
-	f, err := os.Open(path)
-	if err != nil {
-		return nil, fmt.Errorf("open failed: %w", err)
-	}
-	defer f.Close()
-
-	res := make(map[string]string)
-	scanner := bufio.NewScanner(f)
-	for scanner.Scan() {
-		line := scanner.Text()
-		parts := strings.SplitN(line, " ", 2)
-		if len(parts) != 2 {
-			return nil, fmt.Errorf("invalid line: %q", line)
-		}
-		k, v := parts[0], parts[1]
-		if k == "" {
-			return nil, fmt.Errorf("invalid line: %q", line)
-		}
-		if _, ok := res[k]; ok {
-			return nil, fmt.Errorf("repeated key %q", k)
-		}
-		res[k] = v
-	}
-	return res, nil
-}
-
-func main() {
-	flag.Parse()
-	if flagImportpath == "" {
-		log.Fatalf("Importpath must be set")
-	}
-	importpathParts := strings.Split(flagImportpath, "/")
-	packageName := importpathParts[len(importpathParts)-1]
-
-	values, err := parseStatusFile(flagStatusFile)
-	if err != nil {
-		log.Fatalf("Failed to read workspace status file: %v", err)
-	}
-
-	version := &spec.Version{}
-
-	commitHash := values["STABLE_MONOGON_gitCommit"]
-	if commitHash != "" {
-		if len(commitHash) < 8 {
-			log.Fatalf("Git commit hash too short")
-		}
-		buildTreeState := spec.Version_GitInformation_BUILD_TREE_STATE_INVALID
-		switch values["STABLE_MONOGON_gitTreeState"] {
-		case "clean":
-			buildTreeState = spec.Version_GitInformation_BUILD_TREE_STATE_CLEAN
-		case "dirty":
-			buildTreeState = spec.Version_GitInformation_BUILD_TREE_STATE_DIRTY
-		default:
-			log.Fatalf("Invalid git tree state %q", values["STABLE_MONOGON_gitTreeState"])
-		}
-		version.GitInformation = &spec.Version_GitInformation{
-			CommitHash:     commitHash[:8],
-			BuildTreeState: buildTreeState,
-		}
-	}
-
-	productVersion := values["STABLE_MONOGON_"+flagProduct+"_version"]
-	if productVersion != "" {
-		v, err := semver.NewVersion(productVersion)
-		if err != nil {
-			log.Fatalf("Invalid %s version %q: %v", flagProduct, productVersion, err)
-		}
-		// Parse prerelease strings (v1.2.3-foo-bar -> [foo, bar])
-		for _, el := range v.PreRelease.Slice() {
-			preCommitOffset := rePrereleaseCommitOffset.FindStringSubmatch(el)
-			preGitHash := rePrereleaseGitHash.FindStringSubmatch(el)
-			switch {
-			case el == "":
-				// Skip empty slices which happens when there's a semver string with no
-				// prerelease data.
-			case el == "nostamp":
-				// Ignore field, we have it from the global monorepo state.
-			case preCommitOffset != nil:
-				offset, err := strconv.ParseUint(preCommitOffset[1], 10, 64)
-				if err != nil {
-					log.Fatalf("Invalid commit offset value: %v", err)
-				}
-				if version.GitInformation == nil {
-					log.Fatalf("Have git offset but no git commit")
-				}
-				version.GitInformation.CommitsSinceRelease = offset
-			case el == "dirty":
-				// Ignore field, we have it from the global monorepo state.
-			case preGitHash != nil:
-				// Ignore field, we have it from the global monorepo state.
-			default:
-				log.Fatalf("Invalid prerelease string %q (in %q)", el, productVersion)
-			}
-		}
-		version.Release = &spec.Version_Release{
-			Major: v.Major,
-			Minor: v.Minor,
-			Patch: v.Patch,
-		}
-	}
-
-	versionBytes, err := proto.Marshal(version)
-	if err != nil {
-		log.Fatalf("failed to marshal version: %v", err)
-	}
-	literalBytes := make([]string, len(versionBytes))
-	for i, by := range versionBytes {
-		literalBytes[i] = fmt.Sprintf("0x%02x", by)
-	}
-
-	content := []string{
-		`// Generated by //version/stampgo`,
-		`package ` + packageName,
-		``,
-		`import (`,
-		`	"fmt"`,
-		`	"os"`,
-		``,
-		`	"google.golang.org/protobuf/proto"`,
-		``,
-		`	"source.monogon.dev/version/spec"`,
-		`)`,
-		``,
-		`var raw = []byte{`,
-		`	` + strings.Join(literalBytes, ", ") + `,`,
-		`}`,
-		``,
-		`var Version *spec.Version`,
-		``,
-		`func init() {`,
-		`	var version spec.Version`,
-		`	if err := proto.Unmarshal(raw, &version); err != nil {`,
-		`		fmt.Fprintf(os.Stderr, "Invalid stamped version: %v\n", err)`,
-		`	}`,
-		`	Version = &version`,
-		`}`,
-		``,
-	}
-
-	if err := os.WriteFile(flagOutFile, []byte(strings.Join(content, "\n")), 0644); err != nil {
-		log.Fatalf("Failed to write output file: %v", err)
-	}
-}
