sharpebench 0.5.0

SharpeBench command-line interface.
# Version rewrites for the npm surface, attached to this crate because cargo-release
# resolves `file` relative to the crate being processed, not to the workspace root.
# This crate publishes as `sharpebench`, the npm package's Rust counterpart, so the
# rules belong here; the shared release settings stay in the workspace release.toml.
#
# Without these the manifests keep the previous version across a bump, the publish step
# finds that version already on the registry, and skips - reporting success while
# shipping nothing. Cargo.toml is the only place a version is authored.

[[pre-release-replacements]]
file = "../../npm/package.json"
search = '"version": "[0-9]+\.[0-9]+\.[0-9]+"'
replace = '"version": "{{version}}"'
exactly = 1

[[pre-release-replacements]]
file = "../../npm/mcp/package.json"
search = '"version": "[0-9]+\.[0-9]+\.[0-9]+"'
replace = '"version": "{{version}}"'
exactly = 1

# The MCP package depends on the main npm package, so its pin moves in lockstep.
[[pre-release-replacements]]
file = "../../npm/mcp/package.json"
search = '"@general-liquidity/sharpebench": "\^[0-9]+\.[0-9]+\.[0-9]+"'
replace = '"@general-liquidity/sharpebench": "^{{version}}"'
exactly = 1

# wasm-pack regenerates this on build, but keep the committed copy honest.
[[pre-release-replacements]]
file = "../../npm/pkg/package.json"
search = '"version": "[0-9]+\.[0-9]+\.[0-9]+"'
replace = '"version": "{{version}}"'
exactly = 1

# The PyPI surface. crates/sharpebench-py is a pyo3 extension-module, so it is
# `exclude`d from the workspace (it needs a Python interpreter at build time), which
# also means cargo-release never sees it as a member and neither `shared-version` nor
# `dependent-version` touches it. Both its manifests are rewritten here instead, for the
# same reason as the npm ones: a stale version would make the publish step find that
# version already on PyPI and "skip", reporting green while shipping nothing.
[[pre-release-replacements]]
file = "../sharpebench-py/pyproject.toml"
search = '(?m)^version = "[0-9]+\.[0-9]+\.[0-9]+"'
replace = 'version = "{{version}}"'
exactly = 1

[[pre-release-replacements]]
file = "../sharpebench-py/Cargo.toml"
search = '(?m)^version = "[0-9]+\.[0-9]+\.[0-9]+"'
replace = 'version = "{{version}}"'
exactly = 1

# Its three path deps carry explicit `version` pins (needed for the maturin sdist), and
# being outside the workspace they are not rewritten by `dependent-version = "upgrade"`.
[[pre-release-replacements]]
file = "../sharpebench-py/Cargo.toml"
search = 'sharpebench-stats = \{ path = "\.\./sharpebench-stats", version = "[0-9]+\.[0-9]+\.[0-9]+" \}'
replace = 'sharpebench-stats = { path = "../sharpebench-stats", version = "{{version}}" }'
exactly = 1

[[pre-release-replacements]]
file = "../sharpebench-py/Cargo.toml"
search = 'sharpebench-edge = \{ path = "\.\./sharpebench-edge", version = "[0-9]+\.[0-9]+\.[0-9]+" \}'
replace = 'sharpebench-edge = { path = "../sharpebench-edge", version = "{{version}}" }'
exactly = 1

[[pre-release-replacements]]
file = "../sharpebench-py/Cargo.toml"
search = 'sharpebench-core = \{ path = "\.\./sharpebench-core", version = "[0-9]+\.[0-9]+\.[0-9]+" \}'
replace = 'sharpebench-core = { path = "../sharpebench-core", version = "{{version}}" }'
exactly = 1