Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Trace a commit to its published npm versions, including transitive SDK resolution with time-aware accuracy
.claude/skills/tetherto-commit-trace/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 85% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 185% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 155% | 0% |
Given a commit SHA, determines exactly which npm package versions contain it — both directly and transitively via the SDK. Accounts for publish timestamps to give time-accurate resolution answers.
/commit-trace <commit-sha>
/commit-trace a1b2c3d
/commit-trace a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0Verify the commit exists:
bashgit cat-file -t <sha>
If invalid, report and stop.
Show the commit summary for context:
bashgit log --oneline -1 <sha>
Get the list of files changed by this commit:
bashgit diff-tree --no-commit-id --name-only -r <sha>
Map each changed file path to its package by matching packages/<dir>/ prefixes.
For each affected directory, read packages/<dir>/package.json to get:
@qvac/llm-llamacpp)Build a list of (directory, npm-name) pairs. If no packages/ files were touched, report "this commit does not affect any publishable package" and stop.
For each affected package, find which release tags contain the commit:
bashgit tag --contains <sha>
Filter to tags relevant to this package. Tag naming conventions in this repo:
llamacpp-llm-v0.12.1 for @qvac/llm-llamacpp (package llm-llamacpp)ocr-ggml-v0.11.0 for @qvac/ocr-ggmlwhispercpp-v0.5.0 for @qvac/transcription-whispercppAlso check release branches that contain the commit:
bashgit branch -r --contains <sha>
Filter to origin/release-* branches relevant to this package.
From the tags and branches, determine the earliest version that contains this commit.
For each affected package, query npm for all published versions with their timestamps:
bashnpm view <npm-name> time --json
This returns a JSON object like {"0.12.0": "2026-03-01T...", "0.12.1": "2026-03-10T...", ...}.
Cross-reference: for the version(s) found in Step 3, get their exact publish dates.
If the commit is NOT in any released version yet, report it as unreleased — only on main (dev builds) or a feature branch.
This is the critical step. The SDK (@qvac/sdk) depends on addon packages with caret ranges (e.g., "@qvac/llm-llamacpp": "^0.12.1").
For each affected package that the SDK depends on:
Read packages/sdk/package.json and find the dependency entry for this package. Note the semver range (e.g., ^0.12.1).
bashnpm view @qvac/sdk time --json
For each published SDK version:
package.json at that SDK's release tag/branch to get the pinned range^) locks to the minor version, NOT the major. For example:^0.1.5 → >=0.1.5 <0.2.0 (will NOT pick up 0.2.0, 0.3.0, etc.)^0.12.1 → >=0.12.1 <0.13.0 (will NOT pick up 0.13.0)^1.2.3 → >=1.2.3 <2.0.0 (normal behavior for major >= 1)For the SDK's release branch, check if a lock file exists that pins the exact addon version:
bashgit show origin/release-sdk-<version>:packages/sdk/package-lock.json
or
bashgit show origin/release-sdk-<version>:packages/sdk/npm-shrinkwrap.json
If a lock file exists, it tells us exactly what shipped. This is the ground truth.
Present findings in this format:
Commit: <sha> "<commit message>"
Date: <commit date>
━━━ Direct Packages ━━━
@qvac/llm-llamacpp
✅ Released in: v0.12.2 (published 2026-03-15)
⏳ Also in dev: 0.13.0-dev.4 (from main)
@qvac/sdk (files touched directly)
❌ Not yet released (latest: v0.7.0, commit is after)
━━━ Transitive via @qvac/sdk ━━━
@qvac/llm-llamacpp v0.12.2 → consumed by SDK:
@qvac/sdk@0.7.0 (published 2026-03-10, pins "^0.12.1")
Range allows 0.12.2? ✅ Yes
0.12.2 existed at SDK publish time? ❌ No (published 5 days later)
Fresh install today resolves to? 0.12.2 ✅
Lock file shipped with? 0.12.1 ❌
Verdict: ❌ NOT included at release, ✅ included on fresh install today
@qvac/sdk@0.8.0 (published 2026-03-20, pins "^0.12.1")
Range allows 0.12.2? ✅ Yes
0.12.2 existed at SDK publish time? ✅ Yes
Fresh install today resolves to? 0.12.2 ✅
Lock file shipped with? 0.12.2 ✅
Verdict: ✅ included at release AND on fresh install
━━━ Summary ━━━
To guarantee this commit:
• Direct: install @qvac/llm-llamacpp@>=0.12.2
• Via SDK: install @qvac/sdk@>=0.8.0 (or sdk@0.7.0 with fresh npm install today)If the argument looks like a package@version instead of a SHA (contains @):
/commit-trace @qvac/sdk@0.7.0Reverse the flow:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 13,968 | 1,892 | -86% | 1 | 1 | 0% | 2,600 | 2,395 | -8% | 0 | 0 | — |
case-02 | fail→fail | 13,985 | 5,044 | -64% | 1 | 1 | 0% | 2,732 | 2,289 | -16% | 0 | 0 | — |
case-03 | pass→fail | 14,654 | 4,793 | -67% | 1 | 1 | 0% | 2,478 | 2,285 | -8% | 0 | 0 | — |
case-04 | fail→fail | 6,525 | 943 | -86% | 1 | 1 | 0% | 1,131 | 2,162 | +91% | 0 | 0 | — |
case-05 | fail→pass | 9,607 | 3,297 | -66% | 1 | 1 | 0% | 1,504 | 2,524 | +68% | 0 | 0 | — |
case-06 | fail→pass | 9,363 | 6,460 | -31% | 1 | 1 | 0% | 1,693 | 3,124 | +85% | 0 | 0 | — |
case-07 | pass→pass | 5,901 | 5,256 | -11% | 1 | 1 | 0% | 1,172 | 3,110 | +165% | 0 | 0 | — |
case-08 | pass→pass | 5,202 | 4,761 | -8% | 1 | 1 | 0% | 1,015 | 2,965 | +192% | 0 | 0 | — |
case-09 | pass→fail | 13,447 | 4,296 | -68% | 1 | 1 | 0% | 2,355 | 2,663 | +13% | 0 | 0 | — |
case-10 | pass→pass | 7,617 | 5,018 | -34% | 1 | 1 | 0% | 1,338 | 2,887 | +116% | 0 | 0 | — |
case-11 | pass→pass | 7,013 | 8,564 | +22% | 1 | 1 | 0% | 1,383 | 3,772 | +173% | 0 | 0 | — |
case-12 | fail→pass | 6,479 | 2,949 | -54% | 1 | 1 | 0% | 1,226 | 2,591 | +111% | 0 | 0 | — |
case-13 | fail→pass | 5,282 | 3,498 | -34% | 1 | 1 | 0% | 932 | 2,654 | +185% | 0 | 0 | — |
case-14 | pass→pass | 5,116 | 2,981 | -42% | 1 | 1 | 0% | 863 | 2,537 | +194% | 0 | 0 | — |
case-15 | pass→pass | 4,096 | 2,223 | -46% | 1 | 1 | 0% | 699 | 2,420 | +246% | 0 | 0 | — |
case-16 | pass→pass | 8,026 | 5,533 | -31% | 1 | 1 | 0% | 1,478 | 3,207 | +117% | 0 | 0 | — |
case-17 | pass→pass | 8,215 | 4,357 | -47% | 1 | 1 | 0% | 1,451 | 2,744 | +89% | 0 | 0 | — |
case-18 | fail→pass | 8,393 | 7,582 | -10% | 1 | 1 | 0% | 1,394 | 3,550 | +155% | 0 | 0 | — |
case-19 | pass→fail | 6,978 | 1,662 | -76% | 1 | 1 | 0% | 1,407 | 2,266 | +61% | 0 | 0 | — |
case-20 | pass→pass | 10,063 | 6,229 | -38% | 1 | 1 | 0% | 1,812 | 3,126 | +73% | 0 | 0 | — |
case-21 | pass→pass | 9,104 | 4,680 | -49% | 1 | 1 | 0% | 1,564 | 2,789 | +78% | 0 | 0 | — |
case-22 | pass→pass | 13,676 | 8,849 | -35% | 1 | 1 | 0% | 2,518 | 3,710 | +47% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 20 comparable cases. 5 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.