From 8b529f6da521e6686e6b570dd1867a5374575143 Mon Sep 17 00:00:00 2001 From: Kyle Tse Date: Sat, 3 Oct 2026 21:06:50 +0000 Subject: [PATCH] chore: release 0.7.0 (first use reads docs sites, free upgrade preview, licence buy); docs show the 88/105 default first-use score --- CHANGELOG.md | 2 +- Cargo.lock | 4 ++-- Cargo.toml | 2 +- README.md | 1 + crates/lockdocs/Cargo.toml | 2 +- docs/benchmarks.md | 2 +- docs/index.md | 2 +- package.json | 2 +- packages/lockdocs/package.json | 12 ++++++------ packages/npm/darwin-arm64/package.json | 2 +- packages/npm/darwin-x64/package.json | 2 +- packages/npm/linux-arm64-gnu/package.json | 2 +- packages/npm/linux-x64-gnu/package.json | 2 +- packages/npm/win32-x64-msvc/package.json | 2 +- server.json | 4 ++-- 15 files changed, 22 insertions(+), 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8deb994..94da753 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Unreleased +## 0.7.0 - **First use finds the docs sites too.** The automatic first-use fetch (`docs`/`api` before any `lockdocs fetch`) skipped the separate docs-site repositories, so React 19, Express, tokio and Tailwind answers came from package files only. It now reads them as well: the site archive within the same 64 MB cap, else one REST tree request plus raw files (tailwindcss.com is 190 MB and prisma/docs over 800 MB as archives, but a few hundred files). The REST call follows a redirect to the same API host once, which a renamed repository such as prisma/docs answers. A docs-site failure keeps the package docs and says what was skipped in the manifest note; `lockdocs fetch` retries it. On the benchmark's first-use run (empty isolated cache, no credentials, 97 of 105 questions installable locally) 76 become 88 correct and held-out 13/16 becomes 14/16; the first-use floor in `bench/run.py` is 88/105. `upstream::FORMAT` is 6. - **Free upgrade preview.** Without a Pro licence, `lockdocs upgrade ` (and `docs --upgrade-to`, and the `docs` tool's `upgrade_to`) now answers with a short local preview instead of only "Pro required": how many of the APIs your project calls were removed, renamed, re-signed or deprecated, across how many call sites, plus one sample, then the Pro price and link. The full list stays Pro. The MCP answer still carries `structuredContent.pro_required`, the CLI still exits 3, and the preview reads the same installed, cached or opted-in files as the report (no new downloads). diff --git a/Cargo.lock b/Cargo.lock index bebc850..6a688ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -669,7 +669,7 @@ dependencies = [ [[package]] name = "lockdocs" -version = "0.6.0" +version = "0.7.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -682,7 +682,7 @@ dependencies = [ [[package]] name = "lockdocs-core" -version = "0.6.0" +version = "0.7.0" dependencies = [ "anyhow", "dirs 7.0.0", diff --git a/Cargo.toml b/Cargo.toml index 5591260..3db02e5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["crates/lockdocs-core", "crates/lockdocs"] resolver = "2" [workspace.package] -version = "0.6.0" +version = "0.7.0" edition = "2021" license = "MIT" authors = ["SylphxAI"] diff --git a/README.md b/README.md index 756c85e..c11c446 100644 --- a/README.md +++ b/README.md @@ -186,6 +186,7 @@ Registry package downloads remain opt-in; default upstream enrichment uses insta | Context7 (anonymous) | 77/105 | 19/45 | 53/55 | 5/5 | 15/18 | 908 | 2,583 ms | +- **Default first use is 88/105 in 0.7.0** (local first-use run; the table's 70/105 row is the earlier 0.4.0 run and is replaced by the next full benchmark run), above Context7's 77/105. - **Where versions matter most, lockdocs wins by 2x** (38/45 vs 19/45 on older majors). Context7 often answers with the newest API (pydantic 1 questions get pydantic 2 answers). - **Tied on the newest majors (53/55 each) and on tokio (5/5 each); ahead on held-out questions (16/18 vs 15/18)**, which were written before the ranking changes they measure and not used for tuning. - **Faster, fewer tokens, no quota.** Median 58 ms per question after `lockdocs fetch` (185 ms on first use), a fresh CLI process each time. Context7's hosted API took a median 2,583 ms in the earlier runs its reused answers come from. diff --git a/crates/lockdocs/Cargo.toml b/crates/lockdocs/Cargo.toml index 312ce2b..eab83ae 100644 --- a/crates/lockdocs/Cargo.toml +++ b/crates/lockdocs/Cargo.toml @@ -20,7 +20,7 @@ path = "src/main.rs" [dependencies] anyhow = "1" -lockdocs-core = { path = "../lockdocs-core", version = "0.6.0" } +lockdocs-core = { path = "../lockdocs-core", version = "0.7.0" } serde_json = "1" sylphx-mcp-kit = { version = "0.7.0", features = ["licence"] } diff --git a/docs/benchmarks.md b/docs/benchmarks.md index a718592..4a6e45a 100644 --- a/docs/benchmarks.md +++ b/docs/benchmarks.md @@ -32,7 +32,7 @@ The per-question table, index build times and `lockdocs fetch` times are in the ## Reading the results - **lockdocs is ahead overall (96/105 vs 77/105) and on older majors by 2x (38/45 vs 19/45), ties Context7 on the newest majors (53/55 each) and on tokio (5/5 each), and is ahead on the held-out questions (16/18 vs 15/18).** It also uses fewer tokens (880 vs 908 median) and answers in 58 ms instead of 2,583 ms (Context7 latency from the earlier runs its reused answers were measured in). -- **Default first use: 70/105.** From an empty cache with no GitHub token, the first query downloads release-tag docs anonymously; median 185 ms including those downloads (p95 2258 ms). Running `lockdocs fetch` once raises it to 96/105. +- **Default first use: 88/105 in 0.7.0 (70/105 in the run above, which predates it).** From an empty cache with no GitHub token, the first query downloads release-tag docs anonymously, and since 0.7.0 also the docs-site repositories (React, Express, tokio, Tailwind, Prisma); the 0.7.0 figure is a local first-use run (97 of 105 questions installable on that machine, held-out 14/16), and the table above is replaced by the next full benchmark run. The 0.4.0 run's median was 185 ms including downloads (p95 2258 ms). Running `lockdocs fetch` once raises it to 96/105. - **Where each still misses.** lockdocs: seven older-major questions (among them Next.js 14 `cookies()`, React Router 6 `json()`, FastAPI 0.88 `on_event`, Prisma 5 `Buffer`, ESLint 8 `env`), and two held-out newer-major questions (ESLint 9 plugins, Tailwind 4 `@source`). Context7 mostly answers older-major questions with the newest API, and two of its Tailwind answers came from unrelated libraries its search ranked first. - **Configurations matter (from run 36204404336).** Keyword-only on package files: 59/105. Adding the local embedding model: 60/105. Adding `lockdocs fetch` (upstream docs at each version's git tag, plus docs-site repositories for your major): 96/105. - Latency for lockdocs is a fresh CLI process per question, including loading the embedding model; the MCP server keeps it loaded. diff --git a/docs/index.md b/docs/index.md index 5b41214..a0bc597 100644 --- a/docs/index.md +++ b/docs/index.md @@ -24,7 +24,7 @@ proof: - value: "96/105" label: version-sensitive questions right after lockdocs fetch (Context7 77/105) link: /benchmarks - - value: "70/105" + - value: "88/105" label: with default settings from an empty cache link: /benchmarks - value: "58 ms" diff --git a/package.json b/package.json index d0cf073..3c46023 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lockdocs-workspace", - "version": "0.6.0", + "version": "0.7.0", "private": true, "type": "module", "description": "lockdocs monorepo: Rust engine (crates/), npm packages (packages/), docs (docs/), benchmark (bench/).", diff --git a/packages/lockdocs/package.json b/packages/lockdocs/package.json index a006718..a30a341 100644 --- a/packages/lockdocs/package.json +++ b/packages/lockdocs/package.json @@ -1,6 +1,6 @@ { "name": "@sylphx/lockdocs", - "version": "0.6.0", + "version": "0.7.0", "mcpName": "io.github.SylphxAI/lockdocs", "description": "Exact-version library docs from your lockfile — local, offline, no rate limits.", "bin": { @@ -15,11 +15,11 @@ "node": ">=18" }, "optionalDependencies": { - "@sylphx/lockdocs-darwin-arm64": "0.6.0", - "@sylphx/lockdocs-darwin-x64": "0.6.0", - "@sylphx/lockdocs-linux-x64-gnu": "0.6.0", - "@sylphx/lockdocs-linux-arm64-gnu": "0.6.0", - "@sylphx/lockdocs-win32-x64-msvc": "0.6.0" + "@sylphx/lockdocs-darwin-arm64": "0.7.0", + "@sylphx/lockdocs-darwin-x64": "0.7.0", + "@sylphx/lockdocs-linux-x64-gnu": "0.7.0", + "@sylphx/lockdocs-linux-arm64-gnu": "0.7.0", + "@sylphx/lockdocs-win32-x64-msvc": "0.7.0" }, "keywords": [ "mcp", diff --git a/packages/npm/darwin-arm64/package.json b/packages/npm/darwin-arm64/package.json index 1355352..a2f84bd 100644 --- a/packages/npm/darwin-arm64/package.json +++ b/packages/npm/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@sylphx/lockdocs-darwin-arm64", - "version": "0.6.0", + "version": "0.7.0", "description": "lockdocs native binary for darwin-arm64", "os": [ "darwin" diff --git a/packages/npm/darwin-x64/package.json b/packages/npm/darwin-x64/package.json index 451276d..499ff30 100644 --- a/packages/npm/darwin-x64/package.json +++ b/packages/npm/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@sylphx/lockdocs-darwin-x64", - "version": "0.6.0", + "version": "0.7.0", "description": "lockdocs native binary for darwin-x64", "os": [ "darwin" diff --git a/packages/npm/linux-arm64-gnu/package.json b/packages/npm/linux-arm64-gnu/package.json index c507027..c25268e 100644 --- a/packages/npm/linux-arm64-gnu/package.json +++ b/packages/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@sylphx/lockdocs-linux-arm64-gnu", - "version": "0.6.0", + "version": "0.7.0", "description": "lockdocs native binary for linux-arm64-gnu", "os": [ "linux" diff --git a/packages/npm/linux-x64-gnu/package.json b/packages/npm/linux-x64-gnu/package.json index 5bf29a6..49dc659 100644 --- a/packages/npm/linux-x64-gnu/package.json +++ b/packages/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@sylphx/lockdocs-linux-x64-gnu", - "version": "0.6.0", + "version": "0.7.0", "description": "lockdocs native binary for linux-x64-gnu", "os": [ "linux" diff --git a/packages/npm/win32-x64-msvc/package.json b/packages/npm/win32-x64-msvc/package.json index 6a541b7..faec365 100644 --- a/packages/npm/win32-x64-msvc/package.json +++ b/packages/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@sylphx/lockdocs-win32-x64-msvc", - "version": "0.6.0", + "version": "0.7.0", "description": "lockdocs native binary for win32-x64-msvc", "os": [ "win32" diff --git a/server.json b/server.json index 82d7321..8aa0f5b 100644 --- a/server.json +++ b/server.json @@ -7,13 +7,13 @@ "url": "https://github.com/SylphxAI/lockdocs", "source": "github" }, - "version": "0.6.0", + "version": "0.7.0", "websiteUrl": "https://sylphxai.github.io/lockdocs/", "packages": [ { "registryType": "npm", "identifier": "@sylphx/lockdocs", - "version": "0.6.0", + "version": "0.7.0", "transport": { "type": "stdio" },