Skip to content

release: v2.8.0, and rewrite the npm description for what people search - #222

Merged
melihbirim merged 2 commits into
mainfrom
release/v2.8.0
Oct 7, 2026
Merged

melihbirim merged 2 commits into
mainfrom
release/v2.8.0

Conversation

@melihbirim

Copy link
Copy Markdown
Owner

Two things, both needing a publish to take effect.

npm description

Measured what npm's search actually indexes. The answer is name and description, nothing else:

field indexed evidence
name strongest exact name scores 1364; csvql query ranks #1
description yes, as phrases three current description phrases each rank #1 out of 1-2M results, scoring 306-363
keywords no measurable effect duckdb, simd, etl, dataframe, mcp are all keywords; absent from the top 25 for every one
README not indexed three real phrases from nodejs/README.md, all absent
downloads weak an 11/week package outranks us, and a 13k/week package scores 4x a 25M/week one

The old description owned phrases nobody types (no import no database, #1 of 2,097,569). The queries people do type are held by packages matching loosely at 104-167, while our exact-phrase matches score 306-363, so those slots were open by 2-3x.

Old:

SQL on CSV files in place — no import, no database. Zig/SIMD engine for Node and AI agents (MCP). Read-only by design.

New:

Run SQL on CSV files in place. Query large CSV files fast with no import and no database. A CSV SQL engine in Zig with SIMD parsing, for Node and AI agents (MCP). Read only by design.

Covers run sql on csv, query large csv files, csv sql engine and csv files fast while keeping the phrases already won. Every claim is one we have measured. Keywords left alone since they do nothing, and the README is left for humans since search never sees it.

This is a hypothesis from the scoring pattern, not a tested outcome: npm reindexes on publish, so it cannot be A/B tested beforehand. Baseline to compare against after release is in the table above.

The same text goes on pyproject.toml for consistency and clearer copy on the PyPI page, not as a measured SEO claim. PyPI blocks scripted search and publishes no field-weighting docs, so the npm result does not transfer.

v2.8.0

54 commits since v2.7.0. Highlights:

release.yml derives npm and PyPI versions from the tag, but not src/main.zig, so that one is bumped here or csvql --version would keep reporting 2.7.0. pyproject.toml had also drifted to 2.6.0 and is now in line.

Verified locally: 657 tests pass, and bench/verify_correctness.sh is 103/103 against DuckDB.

🤖 Generated with Claude Code

@melihbirim

Copy link
Copy Markdown
Owner Author

Added a third change after finding it via the local release.sh helper, which bumps a version string this PR had missed.

src/mcp.zig line 31 hardcodes the MCP handshake response, including serverInfo.version. Tracing it:

ca82dab  chore: bump version to 1.0.1   <- last commit that moved it
407701c  chore: bump version to 1.0.0
afeabf0  Imprv/arena buffer (#37)

It has not moved since 1.0.1, so every release from 1.1.0 through 2.7.0 reported "version":"1.0.1" to MCP clients. Those releases were tagged directly rather than through release.sh, which is the only thing that bumps this field, and nothing else reads it so no test caught the drift.

Now 2.8.0, verified over the wire:

$ echo '{"jsonrpc":"2.0","id":1,"method":"initialize",...}' | csvql --mcp
serverInfo: {'name': 'csvql', 'version': '2.8.0'}
protocolVersion: 2024-11-05

protocolVersion is deliberately untouched: 2024-11-05 is the MCP spec revision, not our version, and the two sit on the same line.

Worth noting for later, not fixed here: this field will drift again the next time a tag is pushed without release.sh, since release.yml patches package.json and pyproject.toml from the tag but not either Zig source. Making the binary read its version from one place, or asserting it in a test, would close that off.

657 tests still pass.

@melihbirim
melihbirim merged commit 4b62038 into main Oct 7, 2026
13 checks passed
@melihbirim
melihbirim deleted the release/v2.8.0 branch October 8, 2026 11:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant