image-wrangler

Image Wrangler gets road-legal: real semver, a live branch, and a clean modern toolchain

The youngest plugin in the family was sitting on a detached HEAD with a 4-digit version Obsidian's marketplace would reject. One pass later: valid manifest, TypeScript 6, ESLint 10, zero dead dependencies — and its first changelog.

Why Care?

Image Wrangler is the family's newest scaffold — and scaffolds accumulate invisible debt fastest, because nothing forces anyone to look at them. The family-wide dependency campaign forced the look, and found three things a future release would have tripped over:

  1. A detached HEAD — the working copy wasn't on any branch, so any work committed here would have been orphaned.

  2. 4-digit versions everywhere0.0.0.1 in the manifest and package.json, 0.0.1.0 in versions.json. Lossless-internal projects use 4-segment versions, but Obsidian's marketplace requires strict 3-digit semver; this is a submission blocker, not a cosmetic quirk. Worse, minAppVersion was set to the plugin's own version instead of an Obsidian app version.

  3. The inherited dead dependenciesfastify, @modelcontextprotocol/sdk, zod from the starter lineage, zero imports.

What's New?

  • Attached to development (the HEAD was parked exactly at the branch tip, so nothing was lost).

  • Semver fixed across all three files: version 0.0.1, minAppVersion: 0.15.0, versions.json keyed "0.0.1": "0.15.0".

  • Dead deps removed — zero runtime dependencies now.

  • TypeScript 5.8.3 → 6.0.3 with the full tsconfig migration (moduleResolution"bundler", baseUrl/paths removed). TS 6's new types: [] default exposed that the code uses Node's crypto global — now declared explicitly with "types": ["node"], so the dependency on the runtime is visible instead of ambient.

  • ESLint 9.30 → 10.7, typescript-eslint 8.65, esbuild 0.25.6 → 0.28.1, builtin-modules 5.3, @types/node pinned ^22 (Obsidian = Electron 39 = Node 22).

  • This changelog directory — the repo's first, per the family convention that every repo ships its story.

Verified: tsc -noEmit clean on TS 6, esbuild production bundle at 12 KB.

Campaign plan: content-farm/context-v/plans/Dependency-Upgrades-Across-Plugin-Family.md.