Unit L: Vortex extension README, packaging scaffolding, design-doc reconciliation - #24
Merged
Merged
Conversation
…n doc against Units E-J README.md now describes what actually shipped (tool acquisition, conflict scanning, resolve action, merge history, status tile) instead of only Unit F's scaffold-era status, is explicit about how the WSM binary and wcc_lite downloads work and where they come from, documents manual install/build steps, and calls out known gaps (no UI trigger for initial WSM acquisition, no settings override surface). Adds `npm run package` (vortex-extension/scripts/package.mjs) to stage dist/ + info.json into a distributable zip for manual installation - no new dependencies, no CI/release workflow, no binaries committed. Reconciles docs/vortex-extension-design.md against the shipped Units E-J: notes the CLI-first invocation-model recommendation was superseded by an MCP-only implementation, marks which UX surfaces from section 5 actually shipped, updates section 2.2's setup-flow steps against toolAcquisition.ts/bundleTools.ts, and updates Open Questions 4/5 to Resolved based on verified WSM-side code (AppSettings.cs's WSM_<KeyName> mechanism, the --version flag, release.yml). Open Questions 2 and 3 remain explicitly Open/owner-gated, and Open Question 1 is left untouched for Unit K's parallel work. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GXAuGMLB44T5Zv5o5ZzKah
Two independent code-review passes found the posix zip branch nested staged files under a <name>/ subfolder while the Windows branch produced a flat archive - contradicting this same script's own "not a nested subfolder" install instructions. Fixed by cd-ing into the staged directory and zipping its contents on both branches, mirroring release.yml's own `cd <dir> && zip -r ../out.zip .` pattern (which runs on plain Ubuntu via bash, not PowerShell - corrected a comment that had claimed a false pwsh parity with that step). Also: escape embedded single quotes before interpolating paths into the PowerShell command (a repo path containing an apostrophe would otherwise break the quoted string), wrap the Windows branch in the same try/catch the posix branch already had for a clear error instead of a raw stack trace, and check info.json exists up front alongside the existing dist/index.js check. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GXAuGMLB44T5Zv5o5ZzKah
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Unit L — the documentation/packaging batch that follows Units E–J (scaffold, tool
acquisition, conflict scanning, resolve action, merge history, status dashlet). No
functional changes to
vortex-extension/src/; this isREADME.md, a new packagingscript, and a reconciliation pass on
docs/vortex-extension-design.md.vortex-extension/README.md— rewritten from Unit F's scaffold-era status todescribe what actually shipped: tool acquisition, post-deploy conflict scanning +
notification, the "Resolve Script Conflicts" action, the merge-history dashlet, and
the dependency/status dashlet + wcc_lite acquisition. Explicit about what the two
automatic downloads actually do and where they come from (the WSM build via a plain
GitHub Releases GET; wcc_lite via Vortex's own authenticated Nexus-download
mechanism with
allowInstall: false, never bundled/redistributed by this projectitself) — not just restating the design doc's proposal. Documents manual
build/install steps and the two-tier test convention.
vortex-extension/scripts/package.mjs,npm run package) — stagesdist/+info.jsoninto a distributable zip for manualinstallation. No new npm dependencies, no CI/release workflow added (confirmed
.github/workflows/has no existing extension-packaging workflow to duplicate orextend —
release.ymlonly builds the .NET hosts), no binaries committed.docs/vortex-extension-design.mdreconciled against Units E–J: §3'sCLI-first-then-MCP recommendation was superseded (MCP was Unit E's own main
deliverable, built before any feature needed it, and no unit ever built the CLI
path); §5 marks which UX surfaces shipped and on what shape; §2.2's setup-flow steps
are checked against
toolAcquisition.ts/bundleTools.ts; Open Questions 4 and 5are updated to Resolved against verified WSM-side code (
AppSettings.cs'sWSM_<KeyName>mechanism, the--versionflag,release.yml).A finding worth flagging explicitly
Reading every file under
src//test/turned up two real gaps not obvious from anysingle unit's own PR description in isolation:
toolAcquisition.ts'sacquireWsmToolis fully implemented and tested, but no unit through J wired it toa UI trigger —
resolveAction.tsonly tells the user to acquire WSM first if noneis registered; it doesn't offer to. A fresh install today has no in-app path to get
a WSM binary. Documented in the README's "Known gaps" section and in the design
doc's §2.2/§5 reconciliation notes.
The design doc originally proposed a per-game settings-panel override; it was never
built.
Neither is a regression introduced by this PR — both are pre-existing gaps this
read-everything pass surfaced and documented, not code changes.
Open Questions 2 and 3 remain open and owner-gated
Per the root
CLAUDE.md's explicit instruction and this task's own scope boundary,this PR does not resolve, and does not imply resolution of:
Worth noting for the reviewer: Unit J (already merged, prior to this PR) shipped
code that does auto-download wcc_lite via Vortex's Nexus integration, which
answers a narrower version of this question in practice without the repo owner's
sign-off the open question calls for. This PR does not change that behavior — it
only documents it accurately (README's "Being transparent..." section) and flags
the tension explicitly in the design doc rather than treating it as settled.
is explicit that the extension is not yet published anywhere.
Open Question 1 left untouched
Per the task's instructions, §6 Open Question 1 (coexistence/Collections hazards) is
left exactly as it reads, word for word — a separate unit (K) is working this in
parallel in a different worktree, and this reconciliation pass doesn't add any content
elsewhere in the doc that assumes that work exists yet.
Verification
All clean: typecheck/build/lint pass, 159 unit tests pass, 172 tests pass including
integration (real spawned
WitcherScriptMerger.Headlessprocess — MCP handshake,scan_conflicts,merge_conflicts,list_merges,get_status, and theWSM_*env-var override reaching a real process).
Two independent
code-reviewpasses on this diff both found the same real bug: thenew packaging script's posix (
zip) branch nested staged files under a<name>/subfolder while the Windows (
Compress-Archive) branch produced a flat archive —contradicting the script's own install instructions. Fixed by mirroring
release.yml's owncd <dir> && zip -r ../out.zip .pattern on both platforms (thatrelease.yml step runs on Ubuntu via bash
zip, not PowerShell — corrected a commentthat had claimed a false parity there), plus PowerShell single-quote escaping for
paths containing an apostrophe, symmetric error handling on both platform branches,
and an explicit
info.json-exists check alongside the existingdist/index.jscheck.Disclosed rather than silently claimed: the posix
zipbranch has not beenexercised in this environment (no
zipCLI available on the Windows dev machine usedfor this PR) — it rests on mirroring a pattern already proven in this repo's own CI,
not independent verification. The Windows (
Compress-Archive) branch was run and itsoutput verified flat (
index.js/index.js.map/info.jsonat the zip root).AI-assisted development
This PR was substantially produced by an AI coding agent (Claude Code), per
CONTRIBUTING.md's "AI-assisted development" section. Commits carryCo-Authored-By/Claude-Sessiontrailers.