The headline fix there — the kit's read-only SQLite reader never opening a database on Linux — does not affect this plugin. Heroic's library is read from the JSON store_cache, not a database. It is the lutris plugin that was reporting zero games.
The second fix does matter here, because it is about this repo's release gate: parity --compare set process.exitCode = 1 on a mismatch and then returned normally, and runPluginCli overwrote it with 0. So the verb this README calls the release gate — "exits non-zero on any difference", "do not publish a version whose parity run is red" — always exited 0, and any scripted use of it passed regardless of the result. That fix is what makes the parity run below trustworthy.
package.json already ranged ^0.3.0, but bun.lock pinned 0.3.0 exactly.
Heroic has now been launched and signed in on .21 (v2.22.0 flatpak), so store_cache is populated: 89 Epic titles owned, 1 installed (GOG and Amazon are not signed in — their caches are empty).
Run against the live host with the published kit 0.3.1, this plugin still unregistered so the host was on its built-in scanner:
captured 1 "heroic" entries to /tmp/heroic-before.json
parity OK — 1 entries identical
(+1 launcher entry, expected: heroic:launcher)
The single entry is Chess Ultra, matched identically — id legendary:fc0b13b7b17b4a46933756fb2786cdc4, launch.kind: "heroic", detect.install_dir plus the HEROIC_APP_NAME env marker, and art resolving to Epic CDN URLs.
Honest limits
The sample is n=1. A library source only surfaces installed games, and exactly one of the 89 owned titles is installed — so 88 owned-but-not-installed titles are on neither side of the comparison. This proves the installed-game path reproduces the built-in scanner; it does not exercise breadth.
GOG and Amazon are untested — not signed in, so neither the gog_ nor nile_ parsers ran at all.
Parity compares this plugin against the host's built-in scanner, so it cannot catch a bug the two share.
Art is compared by presence, not value, so the covers still want one by-eye check.
After merge
Tag v0.1.0 to publish — this plugin has never been released, so the version already in package.json is the first one, and ci.yml's publish job is gated on refs/tags/v*.
Picks up [punktfunk#78](https://git.unom.io/unom/punktfunk/pulls/78), published as plugin-kit **0.3.1**.
## Which half of #78 matters here
The headline fix there — the kit's read-only SQLite reader never opening a database on Linux — **does not affect this plugin.** Heroic's library is read from the JSON `store_cache`, not a database. It is the lutris plugin that was reporting zero games.
The **second** fix does matter here, because it is about *this* repo's release gate: `parity --compare` set `process.exitCode = 1` on a mismatch and then returned normally, and `runPluginCli` overwrote it with 0. So the verb this README calls the release gate — "exits non-zero on any difference", "do not publish a version whose parity run is red" — always exited 0, and any scripted use of it passed regardless of the result. **That fix is what makes the parity run below trustworthy.**
`package.json` already ranged `^0.3.0`, but `bun.lock` pinned `0.3.0` exactly.
## Gates
biome clean, `tsc --noEmit` clean, **7/7 tests**, bundle builds.
## Parity — run, and green
Heroic has now been launched and signed in on `.21` (v2.22.0 flatpak), so `store_cache` is populated: **89 Epic titles owned, 1 installed** (GOG and Amazon are not signed in — their caches are empty).
Run against the live host with the published kit 0.3.1, this plugin still unregistered so the host was on its built-in scanner:
```
captured 1 "heroic" entries to /tmp/heroic-before.json
parity OK — 1 entries identical
(+1 launcher entry, expected: heroic:launcher)
```
The single entry is Chess Ultra, matched identically — id `legendary:fc0b13b7b17b4a46933756fb2786cdc4`, `launch.kind: "heroic"`, `detect.install_dir` plus the `HEROIC_APP_NAME` env marker, and art resolving to Epic CDN URLs.
## Honest limits
- **The sample is n=1.** A library source only surfaces *installed* games, and exactly one of the 89 owned titles is installed — so 88 owned-but-not-installed titles are on neither side of the comparison. This proves the installed-game path reproduces the built-in scanner; it does not exercise breadth.
- **GOG and Amazon are untested** — not signed in, so neither the `gog_` nor `nile_` parsers ran at all.
- Parity compares this plugin against the host's built-in scanner, so it cannot catch a bug the two share.
- Art is compared by presence, not value, so the covers still want one by-eye check.
## After merge
Tag **`v0.1.0`** to publish — this plugin has never been released, so the version already in `package.json` is the first one, and `ci.yml`'s `publish` job is gated on `refs/tags/v*`.
Picks up punktfunk#78. The headline fix there — the kit's read-only SQLite reader
never opening a database on Linux — does NOT affect this plugin: Heroic's library
is read from the JSON `store_cache`, not a database. The second fix does matter
here, because it is about this plugin's release gate: `parity --compare` set a
non-zero exit code and `runPluginCli` then overwrote it with 0, so a red parity
run always exited 0 and any scripted use of it passed.
The caret range already allowed 0.3.1, but bun.lock pinned 0.3.0 exactly.
Gates: biome clean, tsc clean, 7/7 tests, bundle builds.
⚠ Parity is NOT yet meaningful for this plugin: Heroic is installed on .21 but has
never been launched, so there is no store_cache and no library — both sides of the
comparison are empty and a green run would prove nothing. It needs a signed-in
Heroic before its v0.1.0 tag.
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.
Picks up punktfunk#78, published as plugin-kit 0.3.1.
Which half of #78 matters here
The headline fix there — the kit's read-only SQLite reader never opening a database on Linux — does not affect this plugin. Heroic's library is read from the JSON
store_cache, not a database. It is the lutris plugin that was reporting zero games.The second fix does matter here, because it is about this repo's release gate:
parity --comparesetprocess.exitCode = 1on a mismatch and then returned normally, andrunPluginClioverwrote it with 0. So the verb this README calls the release gate — "exits non-zero on any difference", "do not publish a version whose parity run is red" — always exited 0, and any scripted use of it passed regardless of the result. That fix is what makes the parity run below trustworthy.package.jsonalready ranged^0.3.0, butbun.lockpinned0.3.0exactly.Gates
biome clean,
tsc --noEmitclean, 7/7 tests, bundle builds.Parity — run, and green
Heroic has now been launched and signed in on
.21(v2.22.0 flatpak), sostore_cacheis populated: 89 Epic titles owned, 1 installed (GOG and Amazon are not signed in — their caches are empty).Run against the live host with the published kit 0.3.1, this plugin still unregistered so the host was on its built-in scanner:
The single entry is Chess Ultra, matched identically — id
legendary:fc0b13b7b17b4a46933756fb2786cdc4,launch.kind: "heroic",detect.install_dirplus theHEROIC_APP_NAMEenv marker, and art resolving to Epic CDN URLs.Honest limits
gog_nornile_parsers ran at all.After merge
Tag
v0.1.0to publish — this plugin has never been released, so the version already inpackage.jsonis the first one, andci.yml'spublishjob is gated onrefs/tags/v*.