Skip to content

Correct the review count, give the extension a stable id, and put it under CI - #44

Open
TheValiantOne wants to merge 2 commits into
mainfrom
chore/release-hygiene
Open

Correct the review count, give the extension a stable id, and put it under CI#44
TheValiantOne wants to merge 2 commits into
mainfrom
chore/release-hygiene

Conversation

@TheValiantOne

Copy link
Copy Markdown
Owner

Four small pre-publication fixes. Bundled into one PR deliberately — review bandwidth is the current bottleneck (five PRs already open against a one-reviewer rule), and none of these touch code any other open PR touches.

1. CONTRIBUTING.md said 2 reviews; it's 1

Verified against the real setting:

gh api repos/TheValiantOne/WitcherScriptMerger/branches/main/protection
→ required_approving_review_count: 1   (code owner)

Worth fixing because it misrepresents what it actually takes to land anything — I quoted the stale number myself earlier in this work before checking the API.

2. The extension had no id

Vortex uses info.json's id as the extension's stable identity. Without one, identity and the installed folder name derive from the archive filename, so an update can present as a different extension.

package.mjs now also fails when info.json's version disagrees with package.json's. The zip is named from one and the manifest Vortex reads is the other, with nothing reconciling them — a one-sided bump ships an archive whose filename contradicts the version Vortex reports. Verified the guard fires by deliberately desyncing them:

Version mismatch: package.json says '0.1.0' but info.json says '9.9.9'. ...

3. The extension had no CI at all

build.yml ran only .NET steps, while vortex-extension/ is roughly half of recent activity here — a TypeScript compile error, lint failure, or broken test could land on main unnoticed. Added a job running npm ci + typecheck + lint + test, on ubuntu, gated to runs where the extension changed.

npm ci rather than npm install so a drifted lockfile fails instead of being silently rewritten. The test/ integration suite is deliberately excluded — it spawns a real WSM binary CI has no copy of.

4. Install docs were wrong in two ways

The README claimed the extension was "not yet published anywhere" — the companion-0.1.0 release exists. And it gave %APPDATA%\Vortex\plugins as the install path, which is right only for a default per-user install; with shared storage Vortex uses C:\ProgramData\vortex, which is where this extension is actually installed on the machine this was written on. Both the README and package.mjs's own printed instructions now name both and say how to check.

Verification

npm run typecheck and npm run lint clean, 218 extension tests pass, npm run package produces a working zip, and the new version guard correctly rejects a desynced info.json. The workflow YAML parses and both jobs are present.

Context

These came out of a review pass over the repo's publication-readiness. Two other findings from that pass were fixed in their own branches rather than here: an unrelated discoveredTool.ts change that an over-broad git add -A had swept into #42 (removed — it's a real behaviour change to what a Tools-dashboard click does, and deserves its own review), and a comparer-dropping bug in #43.

AI-assisted development

Produced by Claude Code (Opus 5). Every claim above was verified against the live repo/API rather than taken from documentation — which is how the review-count discrepancy surfaced in the first place.

Chris Knight and others added 2 commits August 22, 2026 00:11
…under CI

Four small pre-publication fixes, bundled into one PR deliberately: review
bandwidth is the current bottleneck (five PRs already open against a one-reviewer
protection rule), and none of these touch code any other open PR touches.

CONTRIBUTING.md said pull requests require 2 approving reviews. The repository's
actual protection requires 1, from a code owner - verified via
`gh api repos/TheValiantOne/WitcherScriptMerger/branches/main/protection`
(required_approving_review_count: 1). The stale number matters because it
misrepresents what it takes to land anything.

vortex-extension/info.json had no `id`. Vortex uses that as the extension's stable
identity; without it, identity and the installed folder name derive from the
archive filename, so an update can look like a different extension. package.mjs
now also fails if info.json's version disagrees with package.json's - the zip is
named from one and the manifest Vortex reads is the other, and nothing reconciled
them, so a one-sided bump would ship an archive whose filename contradicts the
version Vortex reports. Verified the guard fires by deliberately desyncing them.

The Vortex extension had no CI at all - build.yml ran only .NET steps, while the
extension is roughly half of recent activity in this repo. Added a job running
npm ci + typecheck + lint + test, on ubuntu, only when vortex-extension/ changed.
The test/ integration suite is deliberately excluded: it spawns a real WSM binary
that CI has no copy of.

Install docs claimed the extension was "not yet published anywhere" (the
companion-0.1.0 release exists) and gave %APPDATA%\Vortex\plugins as the install
path. That path is only right for a default per-user install - on a shared-storage
setup Vortex uses C:\ProgramData\vortex, which is where this extension is actually
installed on the machine this was written on. Both README and package.mjs's own
printed instructions now name both and say how to check.

Verified: npm typecheck/lint clean, 218 extension tests pass, npm run package
produces a working zip, and the new version guard rejects a desynced info.json.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FP8H6rBLCGPBFRSVsF3Kgw
The comment above stageName still said info.json declares no explicit id - true
before this branch added one, stale immediately after. Rewritten, and backed by an
actual assertion rather than a claim: the staged folder and zip are named from
package.json's name while Vortex identifies the extension by info.json's id, so a
divergence would install under one name and register under another.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant