Pins heroic 0.2.0, which adds the tile that opens Heroic's console mode. Was held as a draft waiting on the host release that carries the value it depends on. That release is now tagged, so this is ready.
The floor changed from what the draft said
The draft pinned minHost: 0.31.5. There is no 0.31.5 — the line went v0.31.4 → v0.32.0. A floor naming a version that never shipped is worse than a merely wrong one: minHost is compared against the host's own CARGO_PKG_VERSION, so every host would have been told it needs something that does not exist.
Corrected to 0.32.0, and not by guessing:
$ git tag --contains ae13b29a
v0.32.0
ae13b29a is the host commit that teaches launcher_ui the heroic-console value. It landed after the v0.31.4 tag, so v0.32.0 is the first — and currently only — release that can serve these tiles.
Why the floor matters here
An unknown launcher_uivalue is a hard 400 that refuses the whole reconcile, not a tile that quietly degrades. So a host below the floor would not merely miss the console tile — it would reject the entire library sync. That asymmetry is exactly what minHost exists for, and it is why this PR waited rather than shipping early.
Checks
bun run validate — 8/8 integrity matches the registry, 0 advisories, exit 0. Heroic 0.2.0's published tarball hash matches the pin.
The rest of the catalog is untouched: epic, gog, lutris, playnite 0.4.5, rom-manager, steam and virtualhere keep their existing versions and floors, all of which name released hosts.
⚠️ After merging — the step that has bitten this repo twice
Confirm publish.yml goes green on main and that v1/index.json.sig regenerates. A merged-but-unsigned catalog is invisible: hosts pin the signing key, so they keep serving the previous catalog and the new pins reach nobody. That is what happened when PR #11 merged and its publish run died on the runner prune-timer, and again when PR #4's merge raced its own reviewedAt commit.
Pins heroic **0.2.0**, which adds the tile that opens Heroic's console mode. Was held as a draft waiting on the host release that carries the value it depends on. **That release is now tagged, so this is ready.**
## The floor changed from what the draft said
The draft pinned `minHost: 0.31.5`. **There is no 0.31.5** — the line went v0.31.4 → v0.32.0. A floor naming a version that never shipped is worse than a merely wrong one: `minHost` is compared against the host's own `CARGO_PKG_VERSION`, so every host would have been told it needs something that does not exist.
Corrected to **0.32.0**, and not by guessing:
```
$ git tag --contains ae13b29a
v0.32.0
```
`ae13b29a` is the host commit that teaches `launcher_ui` the `heroic-console` value. It landed *after* the v0.31.4 tag, so v0.32.0 is the first — and currently only — release that can serve these tiles.
## Why the floor matters here
An unknown `launcher_ui` **value** is a hard 400 that refuses the whole reconcile, not a tile that quietly degrades. So a host below the floor would not merely miss the console tile — it would reject the entire library sync. That asymmetry is exactly what `minHost` exists for, and it is why this PR waited rather than shipping early.
## Checks
`bun run validate` — **8/8 integrity matches the registry**, 0 advisories, exit 0. Heroic 0.2.0's published tarball hash matches the pin.
The rest of the catalog is untouched: epic, gog, lutris, playnite 0.4.5, rom-manager, steam and virtualhere keep their existing versions and floors, all of which name released hosts.
## ⚠️ After merging — the step that has bitten this repo twice
Confirm `publish.yml` goes **green on main** and that `v1/index.json.sig` regenerates. A merged-but-unsigned catalog is invisible: hosts pin the signing key, so they keep serving the previous catalog and the new pins reach nobody. That is what happened when PR #11 merged and its publish run died on the runner prune-timer, and again when PR #4's merge raced its own `reviewedAt` commit.
The GOG/Amazon scan fix and the console-mode tile. minHost rises from 0.25.0
because the console tile publishes `launch.value = "heroic-console"`, a
`launcher_ui` value no host before 0.31.5 knows — and an unknown value is a hard
400 that refuses the whole reconcile, not a dropped tile.
DO NOT MERGE until punktfunk v0.31.5 is tagged. The gate is correct as written,
but merging early replaces the 0.1.1 pin with one no host in the field can
satisfy, which makes Heroic uninstallable from the store for everyone until that
release lands — and delivers the fix to nobody, since 0.2.0 needs 0.31.5 anyway.
This entry was written against a 0.31.5 that never happened — the line went
v0.31.4 -> v0.32.0. A floor naming an unreleased version is worse than a wrong
number: `minHost` is compared against the host's own `CARGO_PKG_VERSION`, so
every host would have been told it needs something that does not exist.
0.32.0 is not a guess. heroic 0.2.0 publishes `heroic-console` tiles, and the
host-side value they depend on arrived in `ae13b29a`:
$ git tag --contains ae13b29a
v0.32.0
That commit landed AFTER the v0.31.4 tag, so v0.32.0 is the first — and
currently only — release that can serve these tiles. An older host rejects an
unknown `launcher_ui` value with a hard 400 that refuses the whole reconcile,
which is exactly what this floor exists to prevent.
`bun run validate`: 8/8 integrity matches the registry, 0 advisories, exit 0.
enricobuehler
changed title from WIP: heroic 0.1.1 → 0.2.0, minHost 0.31.5 — hold until v0.31.5 ships to heroic 0.1.1 → 0.2.0, minHost 0.32.0 — unblocked, v0.32.0 is tagged2026-08-27 21:32:04 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Pins heroic 0.2.0, which adds the tile that opens Heroic's console mode. Was held as a draft waiting on the host release that carries the value it depends on. That release is now tagged, so this is ready.
The floor changed from what the draft said
The draft pinned
minHost: 0.31.5. There is no 0.31.5 — the line went v0.31.4 → v0.32.0. A floor naming a version that never shipped is worse than a merely wrong one:minHostis compared against the host's ownCARGO_PKG_VERSION, so every host would have been told it needs something that does not exist.Corrected to 0.32.0, and not by guessing:
ae13b29ais the host commit that teacheslauncher_uitheheroic-consolevalue. It landed after the v0.31.4 tag, so v0.32.0 is the first — and currently only — release that can serve these tiles.Why the floor matters here
An unknown
launcher_uivalue is a hard 400 that refuses the whole reconcile, not a tile that quietly degrades. So a host below the floor would not merely miss the console tile — it would reject the entire library sync. That asymmetry is exactly whatminHostexists for, and it is why this PR waited rather than shipping early.Checks
bun run validate— 8/8 integrity matches the registry, 0 advisories, exit 0. Heroic 0.2.0's published tarball hash matches the pin.The rest of the catalog is untouched: epic, gog, lutris, playnite 0.4.5, rom-manager, steam and virtualhere keep their existing versions and floors, all of which name released hosts.
⚠️ After merging — the step that has bitten this repo twice
Confirm
publish.ymlgoes green on main and thatv1/index.json.sigregenerates. A merged-but-unsigned catalog is invisible: hosts pin the signing key, so they keep serving the previous catalog and the new pins reach nobody. That is what happened when PR #11 merged and its publish run died on the runner prune-timer, and again when PR #4's merge raced its ownreviewedAtcommit.This entry was written against a 0.31.5 that never happened — the line went v0.31.4 -> v0.32.0. A floor naming an unreleased version is worse than a wrong number: `minHost` is compared against the host's own `CARGO_PKG_VERSION`, so every host would have been told it needs something that does not exist. 0.32.0 is not a guess. heroic 0.2.0 publishes `heroic-console` tiles, and the host-side value they depend on arrived in `ae13b29a`: $ git tag --contains ae13b29a v0.32.0 That commit landed AFTER the v0.31.4 tag, so v0.32.0 is the first — and currently only — release that can serve these tiles. An older host rejects an unknown `launcher_ui` value with a hard 400 that refuses the whole reconcile, which is exactly what this floor exists to prevent. `bun run validate`: 8/8 integrity matches the registry, 0 advisories, exit 0.WIP: heroic 0.1.1 → 0.2.0, minHost 0.31.5 — hold until v0.31.5 shipsto heroic 0.1.1 → 0.2.0, minHost 0.32.0 — unblocked, v0.32.0 is tagged