From 169ff2e2cd254864f3e9527f7fbba4985f33f8ff Mon Sep 17 00:00:00 2001 From: archipelago Date: Sun, 28 Jun 2026 19:56:49 -0400 Subject: [PATCH] fix(bitcoin): knots catalog default must equal top-level version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The knots versions[] marked 29.3.knots20260508 as default while the top-level catalog version is the floating 'latest' tag — violating the generator's own invariant (default:true MUST equal the top-level version so selecting it un-pins / tracks latest). Live effect via package.versions: catalog_default_version='latest' so the UI-highlighted default actually PINS+recreates (opposite of un-pin) and 'latest' was unreachable from the Version & Updates card. Add a 'latest' default entry (== the manifest's floating tag) and keep 29.3.knots20260508 as a pinnable option. Verified on .228: package.versions now returns default=latest with 2 selectable versions. Co-Authored-By: Claude Opus 4.8 (1M context) --- releases/app-catalog.json | 8 ++++++-- scripts/generate-app-catalog.sh | 11 ++++++++--- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/releases/app-catalog.json b/releases/app-catalog.json index f5347a69..e118fcd7 100644 --- a/releases/app-catalog.json +++ b/releases/app-catalog.json @@ -568,9 +568,13 @@ }, "versions": [ { - "version": "29.3.knots20260508", - "image": "146.59.87.168:3000/lfg2025/bitcoin-knots:29.3.knots20260508", + "version": "latest", + "image": "146.59.87.168:3000/lfg2025/bitcoin-knots:latest", "default": true + }, + { + "version": "29.3.knots20260508", + "image": "146.59.87.168:3000/lfg2025/bitcoin-knots:29.3.knots20260508" } ] }, diff --git a/scripts/generate-app-catalog.sh b/scripts/generate-app-catalog.sh index ea8967e1..a519b1fe 100755 --- a/scripts/generate-app-catalog.sh +++ b/scripts/generate-app-catalog.sh @@ -191,11 +191,16 @@ VERSIONS = { {"version": "25.2", "image": f"{REGISTRY}/bitcoin:25.2", "deprecated": True}, ], # Knots: a real tagged build is now published, so it's selectable + pinnable - # in the Knots app interface (the floating :latest remains the manifest - # default; pinning here moves a runner off the floating tag). + # in the Knots app interface. `latest` is the default (== the manifest's + # floating tag) so selecting it un-pins / tracks latest — this MUST match the + # top-level catalog version (L167-168) or the card can't reach "latest" and + # selecting the highlighted default would instead pin+recreate. Pinning + # 29.3.knots20260508 moves a runner off the floating tag. "bitcoin-knots": [ + {"version": "latest", + "image": f"{REGISTRY}/bitcoin-knots:latest", "default": True}, {"version": "29.3.knots20260508", - "image": f"{REGISTRY}/bitcoin-knots:29.3.knots20260508", "default": True}, + "image": f"{REGISTRY}/bitcoin-knots:29.3.knots20260508"}, ], } for app_id, versions in VERSIONS.items():