Limitcast 0.19.2: safer learned checks and clean source maps

An optimizer should preserve the checks you intended to run and the source you actually have. An audit of Limitcast found two places where that could go wrong: learning an unrelated command as a replacement, and reusing a source map generated during temporary edits.

Limitcast 0.19.2 fixes both issues and is available on npm, GitHub and Homebrew. This is a correctness release. It also adds the Limitcast icon to Codex plugin settings and pins every plugin command to 0.19.2.

A successful build does not replace a lint check

The old learning logic could observe a failed npm run lint, followed by a successful npm run build, across three sessions and recommend the build command as a replacement. Both were grouped as non-test commands, even though they verify different things.

The fix checks the identity of the verification command before learning a replacement. Equivalent launchers for the same Python test framework can still qualify, as can npm test and npm run test. Lint, build, type-check and unrelated test runners do not substitute for one another.

The same compatibility check runs when saved facts are loaded. That means an incompatible recommendation learned before this patch is excluded from the context supplied to a later session.

Temporary edits should not survive in a cached map

Previously, a source map generated from a dirty working tree could be stored against the unchanged Git commit. Restoring the original source could then leave temporary function names in the map returned for the clean repository.

Limitcast now writes map caches only for clean working trees. Maps can still be generated while you work, but that output cannot overwrite the clean cache. The cache format also changes, so legacy entries are regenerated rather than trusted after the upgrade.

What was checked

Those checks establish the repaired behavior and installation state. They do not measure real-world token savings or replace testing in full signed-in conversations.

Why the packing algorithm stayed the same

The audit also compared the source-map selector with a knapsack reference. At the default 6,000-character budget, all 89 eligible files already fit. A smaller budget improved a synthetic coverage score, but the score alone did not show that developers would get a more useful map. The selector stays unchanged in this release.

Upgrade to 0.19.2

npm install -g limitcast@0.19.2
limitcast --version
limitcast doctor

For an existing Homebrew installation:

brew update
brew upgrade samstull9007/limitcast/limitcast

Update the Limitcast plugin in your agent host too. Restart existing sessions to load refreshed plugin commands and extensions; a CLI upgrade alone does not reload an already-running session.