From d26c23313cb64214f36c95c1d61485499e42e431 Mon Sep 17 00:00:00 2001 From: eccgecko <36884529+eccgecko@users.noreply.github.com> Date: Fri, 10 Apr 2026 22:42:32 +0100 Subject: [PATCH] fix: show "No expiry" badge for Go zero-time expiry uiTagsForNode() only checked node.expiry === null, missing Go zero-time that headscale returns for tagged nodes after a restart (juanfont/headscale#3170). The !node.expired guard is technically redundant with isNoExpiry but documents intent: "No expiry" is only shown for nodes that never had an expiry set --- app/routes/machines/components/machine-row.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/routes/machines/components/machine-row.tsx b/app/routes/machines/components/machine-row.tsx index 489deac..d6bc4e5 100644 --- a/app/routes/machines/components/machine-row.tsx +++ b/app/routes/machines/components/machine-row.tsx @@ -13,7 +13,7 @@ import { TailscaleSSHTag } from "~/components/tags/TailscaleSSH"; import type { User } from "~/types"; import cn from "~/utils/cn"; import * as hinfo from "~/utils/host-info"; -import type { PopulatedNode } from "~/utils/node-info"; +import { isNoExpiry, type PopulatedNode } from "~/utils/node-info"; import { formatTimeDelta } from "~/utils/time"; import toast from "~/utils/toast"; import { getUserDisplayName } from "~/utils/user"; @@ -156,7 +156,7 @@ export function uiTagsForNode(node: PopulatedNode, isAgent?: boolean) { uiTags.push("expired"); } - if (node.expiry === null) { + if (!node.expired && isNoExpiry(node.expiry)) { uiTags.push("no-expiry"); }