Pin playnite 0.3.0 #2

Merged
enricobuehler merged 1 commits from chore/pin-playnite-0.3.0 into main 2026-07-27 14:08:33 +00:00
Owner

Checklist boxes are deliberately left unticked. I authored playnite 0.3.0, so
ticking "I have personally checked" here would be the author reviewing the author.
Everything below is evidence gathered mechanically from the published tarball, laid
out so a second person can confirm it quickly. The boxes and the merge are the reviewer's.

What changed

  • Package: @punktfunk/plugin-playnite
  • Version: 0.2.0 -> 0.3.0
  • Type: version bump

Diff reviewed

Tarball compared:

R=https://git.unom.io/api/packages/unom/npm
curl -sSL -o old.tgz "$R/%40punktfunk%2Fplugin-playnite/-/0.2.0/plugin-playnite-0.2.0.tgz"
curl -sSL -o new.tgz "$R/%40punktfunk%2Fplugin-playnite/-/0.3.0/plugin-playnite-0.3.0.tgz"
mkdir old new && tar xzf old.tgz -C old && tar xzf new.tgz -C new
diff -ru old/ new/
Whole published delta, both bundles (dist/index.js and dist/cli.js carry it identically):

  + installDir: withDefault2(Schema5.NullOr(Schema5.String), null)   // exported-game schema

  + const installDir = g.installDir?.trim();
    entries.push({
      external_id: g.id, title, launch: launchCommand(g.id, platform),
      ...art ? { art } : {},
  +   ...installDir ? { detect: { install_dir: installDir } } : {}
    });

package.json:  version 0.2.0 -> 0.3.0
               @punktfunk/plugin-kit ^0.1.4 -> ^0.2.0
               (no other key changed -- scripts, deps, files, punktfunk block all identical)

dist/ui/  rebuilt because plugin-kit moved. NOT a behavioural change:
          - large chunk 705333 -> 705651 bytes, diff is minifier identifier churn
            only (Rt->kt, ar->lr, We->Qe, Gt->Yt -- the whole symbol table shifted)
          - prose diff is EMPTY in both directions: zero user-visible strings
            added or removed
          - index.html changed only to reference the new chunk hash
          - CSS and all five woff2 fonts byte-identical

No files added or removed other than the renamed content-hashed chunks.

That functional change is the point of the release: entries now say where a game is
installed, which is what lets the host recognise a title's process after Playnite's
launcher hands off and exits — the case where the host would otherwise lose the game
the moment the shim returns, and end the streaming session along with it.

Evidence for each checklist item

  • Diffed against the previously pinned version. Full diff -ru of both extracted
    tarballs, reproduced above. 0.2.0 is the previously pinned version.
  • No unexpected network endpoints. Every absolute URL in the tarball:
    json-schema.org (draft-04/07/2020-12), w3.org (MathML/xlink/svg/xml namespaces),
    git.unom.io (the plugin's own homepage, repo, issues, and registry — metadata),
    github.com/Effect-TS/effect/issues and react.dev/errors/ (library error-doc
    links), http://localhost (bundled-lib default base). No telemetry, analytics, or
    beaconing. Unchanged from 0.2.0.
  • No filesystem access beyond the stated purpose. The functional delta reads one
    additional field off Playnite's own export payload. No new fs surface.
  • No obfuscated or minified code where source is expected. The host-side bundles
    are readable: dist/index.js 718 lines / longest line 411 chars, dist/cli.js 742 /
    304. The dist/ui/ chunks are a vite production build (declared: build:ui), as in
    0.2.0.
  • No install lifecycle scripts. No preinstall/install/postinstall/prepare/
    prepublish. prepublishOnly is present and unchanged from 0.2.0 — it runs
    author-side on publish, never on a user's machine at install time.
  • Dependencies reviewed and justified. See below.
  • Pinned integrity matches the registry. Fetched dist.integrity from the registry
    and independently recomputed it from the downloaded tarball
    (openssl dgst -sha512 -binary new.tgz | base64). All three agree:
    sha512-XiWZLRqRGpcx6e3rHV/+7n3mWC9p6rs7a20oGxkzca/ty+4cVKq0I566byUJ+pWSa3TXRaQb4y4QhLNrHvhinQ==
    bun run validate also passes.
  • Version is an exact semver. 0.3.0.
  • Metadata is accurate. Title, description, icon, author, homepage, license and
    platforms: [windows] are unchanged and still correct. minHost stays 0.15.0,
    checked rather than assumed: the new detect key is additive and optional host-side
    (#[serde(default, skip_serializing_if = ...)], and the host sets
    deny_unknown_fields nowhere), so 0.3.0 on a pre-detect host behaves exactly like
    0.2.0 rather than failing to ingest. No newer host is required.
  • reviewedAt. Set to 2026-07-27. It asserts that a human read this build — so
    it is only true once the reviewer has.

Dependencies added or changed

@punktfunk/plugin-kit ^0.1.4 -> ^0.2.0. First-party, same registry and org, and
the reason for the release: 0.2.0 of the kit carries the provider-entry detect field
this plugin now emits. No new transitive weight — nothing else in dependencies moved,
and the bundle externalises effect and @punktfunk/* rather than vendoring them.

Anything that gave you pause

Two things, neither a blocker, both stated so they are not silently absorbed:

  1. I wrote the release I am pinning. Hence the unticked boxes above. The security
    value of this index comes from a second pair of eyes, and this PR does not have them
    yet.

  2. The pin covers the plugin tarball, not its dependency closure. @punktfunk/plugin-kit
    is a caret range, so it resolves at install time and whatever 0.2.x is newest lands
    on a user's host outside the hash pinned here. That is pre-existing — 0.2.0 pinned
    ^0.1.4 the same way, and rom-manager does likewise — so it is not something this PR
    changes or should fix unilaterally. Flagging it as a property of the model worth a
    deliberate decision sometime, not as a finding against this release.

Nothing else stood out. The UI churn looked alarming by byte count until the prose diff
came back empty in both directions, which is what makes it a rebuild rather than a change.

> **Checklist boxes are deliberately left unticked.** I authored playnite 0.3.0, so > ticking "I have personally checked" here would be the author reviewing the author. > Everything below is *evidence* gathered mechanically from the published tarball, laid > out so a second person can confirm it quickly. The boxes and the merge are the reviewer's. ## What changed - **Package:** `@punktfunk/plugin-playnite` - **Version:** `0.2.0` -> `0.3.0` - **Type:** version bump ## Diff reviewed **Tarball compared:** ``` R=https://git.unom.io/api/packages/unom/npm curl -sSL -o old.tgz "$R/%40punktfunk%2Fplugin-playnite/-/0.2.0/plugin-playnite-0.2.0.tgz" curl -sSL -o new.tgz "$R/%40punktfunk%2Fplugin-playnite/-/0.3.0/plugin-playnite-0.3.0.tgz" mkdir old new && tar xzf old.tgz -C old && tar xzf new.tgz -C new diff -ru old/ new/ ``` ``` Whole published delta, both bundles (dist/index.js and dist/cli.js carry it identically): + installDir: withDefault2(Schema5.NullOr(Schema5.String), null) // exported-game schema + const installDir = g.installDir?.trim(); entries.push({ external_id: g.id, title, launch: launchCommand(g.id, platform), ...art ? { art } : {}, + ...installDir ? { detect: { install_dir: installDir } } : {} }); package.json: version 0.2.0 -> 0.3.0 @punktfunk/plugin-kit ^0.1.4 -> ^0.2.0 (no other key changed -- scripts, deps, files, punktfunk block all identical) dist/ui/ rebuilt because plugin-kit moved. NOT a behavioural change: - large chunk 705333 -> 705651 bytes, diff is minifier identifier churn only (Rt->kt, ar->lr, We->Qe, Gt->Yt -- the whole symbol table shifted) - prose diff is EMPTY in both directions: zero user-visible strings added or removed - index.html changed only to reference the new chunk hash - CSS and all five woff2 fonts byte-identical No files added or removed other than the renamed content-hashed chunks. ``` That functional change is the point of the release: entries now say where a game is installed, which is what lets the host recognise a title's process after Playnite's launcher hands off and exits — the case where the host would otherwise lose the game the moment the shim returns, and end the streaming session along with it. ## Evidence for each checklist item - **Diffed against the previously pinned version.** Full `diff -ru` of both extracted tarballs, reproduced above. 0.2.0 is the previously pinned version. - **No unexpected network endpoints.** Every absolute URL in the tarball: `json-schema.org` (draft-04/07/2020-12), `w3.org` (MathML/xlink/svg/xml namespaces), `git.unom.io` (the plugin's own homepage, repo, issues, and registry — metadata), `github.com/Effect-TS/effect/issues` and `react.dev/errors/` (library error-doc links), `http://localhost` (bundled-lib default base). No telemetry, analytics, or beaconing. Unchanged from 0.2.0. - **No filesystem access beyond the stated purpose.** The functional delta reads one additional field off Playnite's own export payload. No new fs surface. - **No obfuscated or minified code where source is expected.** The host-side bundles are readable: `dist/index.js` 718 lines / longest line 411 chars, `dist/cli.js` 742 / 304. The `dist/ui/` chunks are a vite production build (declared: `build:ui`), as in 0.2.0. - **No install lifecycle scripts.** No `preinstall`/`install`/`postinstall`/`prepare`/ `prepublish`. `prepublishOnly` is present and unchanged from 0.2.0 — it runs author-side on publish, never on a user's machine at install time. - **Dependencies reviewed and justified.** See below. - **Pinned integrity matches the registry.** Fetched `dist.integrity` from the registry *and* independently recomputed it from the downloaded tarball (`openssl dgst -sha512 -binary new.tgz | base64`). All three agree: `sha512-XiWZLRqRGpcx6e3rHV/+7n3mWC9p6rs7a20oGxkzca/ty+4cVKq0I566byUJ+pWSa3TXRaQb4y4QhLNrHvhinQ==` `bun run validate` also passes. - **Version is an exact semver.** `0.3.0`. - **Metadata is accurate.** Title, description, icon, author, homepage, license and `platforms: [windows]` are unchanged and still correct. `minHost` stays `0.15.0`, checked rather than assumed: the new `detect` key is additive and optional host-side (`#[serde(default, skip_serializing_if = ...)]`, and the host sets `deny_unknown_fields` nowhere), so 0.3.0 on a pre-`detect` host behaves exactly like 0.2.0 rather than failing to ingest. No newer host is required. - **`reviewedAt`.** Set to `2026-07-27`. It asserts that a human read *this* build — so it is only true once the reviewer has. ## Dependencies added or changed `@punktfunk/plugin-kit` `^0.1.4` -> `^0.2.0`. First-party, same registry and org, and the reason for the release: 0.2.0 of the kit carries the provider-entry `detect` field this plugin now emits. No new transitive weight — nothing else in `dependencies` moved, and the bundle externalises `effect` and `@punktfunk/*` rather than vendoring them. ## Anything that gave you pause Two things, neither a blocker, both stated so they are not silently absorbed: 1. **I wrote the release I am pinning.** Hence the unticked boxes above. The security value of this index comes from a second pair of eyes, and this PR does not have them yet. 2. **The pin covers the plugin tarball, not its dependency closure.** `@punktfunk/plugin-kit` is a caret range, so it resolves at install time and whatever `0.2.x` is newest lands on a user's host outside the hash pinned here. That is pre-existing — 0.2.0 pinned `^0.1.4` the same way, and rom-manager does likewise — so it is not something this PR changes or should fix unilaterally. Flagging it as a property of the model worth a deliberate decision sometime, not as a finding against this release. Nothing else stood out. The UI churn looked alarming by byte count until the prose diff came back empty in both directions, which is what makes it a rebuild rather than a change.
enricobuehler added 1 commit 2026-07-27 13:27:44 +00:00
chore(index): pin playnite 0.3.0
validate / validate (pull_request) Successful in 18s
4539997f92
0.3.0 teaches the provider to report where a game is installed. Each exported
entry now carries `detect: { install_dir }` when Playnite knows one, which is
what lets the host recognize a title's process after Playnite's launcher hands
off and exits — the case where the host would otherwise lose the game the
moment the shim returns, and end the session with it.

The published delta is exactly that, and nothing else:

  * `installDir` added to the exported-game schema (nullable, defaults null),
    threaded into the entry as `detect.install_dir` when non-blank.
  * `@punktfunk/plugin-kit` ^0.1.4 -> ^0.2.0.
  * The version bump, embedded in both bundles.

The console UI rebuilt because plugin-kit moved, but did not change: the diff
against 0.2.0's chunk is minifier identifier churn (`Rt`->`kt`, `ar`->`lr`)
with zero prose added or removed, so there is no new user-visible text and no
new behaviour. Fonts and CSS are byte-identical.

No new outbound hosts. Every absolute URL in the tarball is a schema/XML
namespace, the plugin's own homepage and registry, or an effect/react error-doc
link — no telemetry, no beaconing. No install lifecycle scripts (`prepublishOnly`
is author-side and unchanged). No `eval`, `new Function`, or `child_process` in
any bundle.

minHost stays 0.15.0. The new `detect` key is additive and optional on the host
side (`#[serde(default)]`, and the host denies no unknown fields), so 0.3.0 on a
pre-`detect` host simply behaves like 0.2.0 rather than failing to ingest.

Integrity was fetched from the registry and independently recomputed from the
downloaded tarball; both agree.
enricobuehler merged commit 762f13d3db into main 2026-07-27 14:08:33 +00:00
enricobuehler deleted branch chore/pin-playnite-0.3.0 2026-07-27 14:08:39 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk-plugin-index#2