The whole plugin family gets current in one day — ten repos, three passes, every build green
A researched dependency campaign swept nine plugin modules plus the umbrella: TypeScript 6 and ESLint 10 everywhere, twenty-two dead dependencies removed, a GPL relicense dodged, two marketplace blockers fixed — and the umbrella's build went from 3,910 errors to zero.
Why Care?
Dependency drift is the tax every plugin family pays quietly until the
bill arrives all at once — a forced migration at the worst moment, a
security alert about code you forgot you shipped, a marketplace rejection
over a version string. Today we paid the tax deliberately instead:
a three-pass campaign (patch/minor sweep → researched majors → forks),
defined durably in context-v/loops/ and inventoried in
context-v/plans/, executed across every Lossless-original plugin in one
sitting. Every module was proven green — typecheck, lint where configured,
production bundle — before its commit landed.
What's New?
TypeScript 5.8 → 6.0.3 and ESLint 9 → 10.7 everywhere. Every tsconfig migrated properly off the options TypeScript 7 will remove (
moduleResolution: "node"→"bundler",baseUrl/pathsdropped) — noignoreDeprecationsescape hatches. The family is now clean-on-6, which Microsoft guarantees compiles identically on the 10×-faster native TypeScript 7 when we choose to jump.Twenty-two dead dependency declarations removed across six repos. The starter template's never-imported
fastify/@modelcontextprotocol/sdk/zodtrio (plus an accidental package literally nameddev, an unusedopen, and two deprecated@types/*stubs) had been inherited by module after module. Purged everywhere — including infilestarteritself, so future scaffolds start clean.A GPL relicense dodged by deletion: typed.js v3 went MIT → GPL-3.0; metafetch rebuilt the typing animation in ~100 lines of its own TypeScript and dropped the dependency. Bundle −18%.
@types/nodepinned to reality: Obsidian ships Electron 39 = Node 22, so every module now pins^22— several moved down from 24/25, whose types describe APIs the runtime doesn't have.The big API deps crossed on research, not luck: googleapis 158 → 173 and @anthropic-ai/sdk 0.92 → 0.115 both landed with zero code changes (the release notes told us why that was safe before we moved); marked 9 → 18 needed exactly one line.
Marketplace blockers fixed: the umbrella and image-wrangler both carried 4-digit
0.0.0.1versions (andminAppVersionset to themselves) — now strict 3-digit semver across manifest/package/versions.The umbrella build resurrected: its typecheck had been failing with 3,910 errors (it was sweeping
splash/and every submodule into its own compile). Scoped excludes + five genuine bug fixes inmain.ts— including two citation commands and the Freepik key-update path that would have thrown at runtime — took it to zero.
Under the Hood
The repeating TS 6 mechanics, for anyone crossing the same bridge: the
types: [] default flip silently removes Node globals (crypto,
child_process) until you declare "types": ["node"]; bundler
resolution starts type-checking side-effect CSS imports (one ambient
*.css declaration fixes it); and noUncheckedIndexedAccess catches
real out-of-range indexing — it flagged two spots in metafetch's new
typewriter before the code ever ran.
Per-module stories live in each repo's own changelog/2026-07-24_01.md:
cite-wide, image-gin, metafetch, perplexed, plunk-it, lmstud-yo,
filestarter, file-transporter, and image-wrangler (its first-ever entry).
What's Not Done
Pass C (forks):
obsidian-gitawaits explicit sign-off — its CLAUDE.md still says "do not modify," and the right move is likely an upstream sync, not independent bumps.Deferred with reasons: TypeScript 7 (next campaign, from the paid-up 6.x position) and typed.js 3 (resolved by removal instead).
grab-reference sat the campaign out — it turned out to be a citation-manager web stack, not an Obsidian plugin; its fate is an open question in
context-v/issues/What-To-Do-With-Grab-Reference.md.Human rung: the plugins deserve a sandbox-vault smoke test — metafetch's rebuilt animation and the umbrella's revived commands most of all.
Tracking: content-farm#7
