From lockstep
Use when the user is migrating a file from JavaScript to TypeScript, or after any edit to a `.ts` / `.tsx` file that has a `.js` counterpart on the default branch. Also use when interpreting lockstep findings or verdicts. This skill teaches WHEN to call `mcp__lockstep__verify_migration`, HOW to read its report, and the **remediation pattern** to recommend when the migration diverges from the JS baseline.
How this skill is triggered — by the user, by Claude, or both
Slash command
/lockstep:lockstep-verifyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`lockstep` is a deterministic gate that complements `tsc` and unit tests.
lockstep is a deterministic gate that complements tsc and unit tests.
It strips TS-only constructs from the head version of a file, structurally
compares the result to the JS counterpart on the default branch, and surfaces
any divergence. The migration is "behavior-preserving" iff the report's
verdict is approve.
Call mcp__lockstep__verify_migration (the slash command /lockstep-verify
is the same thing) in these situations:
.js file to .ts / .tsx — even if tsc passes.
tsc validates types; lockstep validates that no logic changed.Skip the call when:
.ts file with no .js predecessor — lockstep has
nothing to compare against and will skip it.The tool returns a Report with:
verdict.kind — approve or request_changes.summary — one-line synopsis; read this first.counts — { error, warn, info }.findings[] — each has:
path — head-side path.category — see below.message — human description.base_kind / head_kind — tree-sitter node kinds at the divergence point.base_line / head_line — 1-based.base_snippet / head_snippet — ±2 lines of context.allow_enum_to_iife
in .lockstep/config.toml.--verbose to
dump the normalized source under .lockstep/debug/.These differences between base and head will not be flagged:
var → const / let (both sides are normalized to let).'foo' vs "foo").as casts, ! assertions, generics,
interface / type declarations, type-only imports, accessibility
modifiers, readonly / override / abstract modifiers, and overload
signatures.Anything else means the runtime behavior of HEAD diverged from the baseline.
When the verdict is request_changes, the standard fix is:
approve.Do not silence findings by adding @ts-ignore or by opting in to allow
flags — that defeats the gate.
mcp__lockstep__verify_migration — args { paths?: string[], base?: string, repo?: string }. Returns a Report.mcp__lockstep__explain_finding — args { category: string }. Returns the prose for one finding category.mcp__lockstep__get_config — returns the resolved .lockstep/config.toml. Useful when verify produces unexpected results — confirm default_branch, allow_* flags.Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub kylebastien/lockstep --plugin lockstep