Repository navigation
Releases: Koukyosyumei/h5i-db
Releases · Koukyosyumei/h5i-db
Release list
v0.1.6
h5i-db v0.1.6 Feature release: notebooks that run inside the terminal, on a real Jupyter kernel, with plots drawn where they are produced. This is the release that carries the notebook to crates.io. v0.1.5 reached PyPI but not crates.io, because the Windows binary failed to build and the publish job depends on it; crates.io therefore goes from 0.1.4 to 0.1.6, and h5i-db-notebook is published for the first time. In-terminal notebooks nbformat v4 document model with a byte-faithful round-trip, so a notebook edited here still opens unchanged in JupyterLab. Jupyter kernel client over ZeroMQ, plus a native SQL kernel and `%%sql` cell routing against an h5i-db database. `nb view` is the editable UI: Jupyter key bindings, a completion popup from `complete_request`, an inspection overlay from `inspect_request`, and a Ctrl-C that interrupts the running cell rather than killing the UI, because the notebook is the state. `nb watch` follows a notebook read-only. It takes no lock, starts no kernel and never writes, so any number of panes can sit beside an agent driving cells through `nb exec` without being able to spoil the run. `nb exec` and `nb run --cells 3-7` drive the same session from the command line, against a kernel that keeps its state between calls. `nb export` to markdown, a runnable script, or standalone HTML; `nb ls` reports every session on the machine and reaps the ones whose supervisor died. Inline images The terminal is asked what it can draw rather than guessed at from TERM_PROGRAM and KITTY_WINDOW_ID, which do not survive the trip into WSL: from inside the distro every terminal looks like a bare xterm-256color, and every plot used to be a placeholder. Sixel, kitty, iTerm2, and unicode half-blocks for anything else, each drawn at the figure's own aspect ratio. Platform support The notebook is Unix only, and now says so instead of failing to compile. Its supervisor is built on Unix domain sockets, flock, POSIX signals and Unix file modes. On Windows the crate is empty, `h5i-nb` explains itself and exits, and `h5i-db nb` returns the reason rather than "unrecognized subcommand". Everything else in h5i-db works there as before, and CI now compiles the whole workspace on Windows so this cannot reach a tag again. Packaging h5i-db-notebook is published for the first time. The minimum supported Rust version moves from 1.89 to 1.90, because icy_sixel pins quantette ^0.5 and no quantette release declares less.
v0.1.5
h5i-db v0.1.5 Feature release: notebooks that run inside the terminal, on a real Jupyter kernel, with plots drawn where they are produced. In-terminal notebooks nbformat v4 document model with a byte-faithful round-trip, so a notebook edited here still opens unchanged in JupyterLab. Jupyter kernel client over ZeroMQ, plus a native SQL kernel and `%%sql` cell routing against an h5i-db database. `nb view` is the editable UI: Jupyter key bindings, a completion popup from `complete_request`, an inspection overlay from `inspect_request`, and a Ctrl-C that interrupts the running cell rather than killing the UI, because the notebook is the state. `nb watch` follows a notebook read-only. It takes no lock, starts no kernel and never writes, so any number of panes can sit beside an agent driving cells through `nb exec` without being able to spoil the run. `nb exec` and `nb run --cells 3-7` drive the same session from the command line, against a kernel that keeps its state between calls. `nb export` to markdown, a runnable script, or standalone HTML; `nb ls` reports every session on the machine and reaps the ones whose supervisor died. Inline images The terminal is asked what it can draw rather than guessed at from TERM_PROGRAM and KITTY_WINDOW_ID, which do not survive the trip into WSL: from inside the distro every terminal looks like a bare xterm-256color, and every plot used to be a placeholder. Sixel, kitty, iTerm2, and unicode half-blocks for anything else, each drawn at the figure's own aspect ratio. Packaging h5i-db-notebook is published for the first time. The minimum supported Rust version moves from 1.89 to 1.90, because icy_sixel pins quantette ^0.5 and no quantette release declares less.
v0.1.4
h5i-db v0.1.4
Correctness release: eight issues from the 2026-08 round-two review sweep,
two of them regressions since v0.1.3.
Regressions since v0.1.3
#80 cli: ingest column matching had become case-sensitive, breaking
CSV and Parquet files that used to load.
#81 quant: walk_forward's embargo width was scaled to the whole sample
and could purge every fold's training set.
Silent wrong answers
#84 core: row-group pruning addressed parquet leaves with an Arrow
field index, so a time-filtered scan over a schema with a nested
column could return zero rows.
#76 backtest: a split fired every parked stop and left its trigger and
size unscaled.
Correctness
#78 backtest: the margin engine and the equity curve used two
different definitions of equity.
#79 core: ENOSPC stayed retryable on every data-path write.
#77 backtest: mint and redeem bypassed the stopped-trading gate.
#82 backtest: settlement ignored instrument kind; the spot naked-short
exemption is now documented.
No format change: v0.1.3 databases are read unchanged.
v0.1.3
Perpetuals and prediction markets, modelled rather than approximated. Engine - Prediction markets: six gaps, found by comparing this crate against a NautilusTrader-based Polymarket backtester. A contract cannot be borrowed, so naked outcome shorts are rejected and a short is collateralised at (1 - mark) rather than at the mark. Complete-set mint and redeem make the sum-to-one invariant transactable. Negative-risk conversion is provably a redemption of k-1 sets, gated on neg_risk from Gamma. Payout is Winner, Split or Void, so a voided market and a 50-50 stop being wrong by the full notional. Strategies can state a probability, which a run report joins to realized payouts. And expiration is finally read, so orders after the bell are rejected and resting orders cancelled. - Perpetual futures. A derivatives venue does not margin you against the mid: mark and oracle are first-class prices, margin and unrealised PnL and liquidation read the mark, funding is charged on the oracle, and an absent price stays absent rather than defaulting to a zero that would liquidate the account. Hyperliquid's per-coin, five-significant-figure price rule replaces a flat tick, which accepted prices the venue refuses. Post-only is checked on arrival, fees are tiered on rolling volume with the schedule supplied rather than baked in, leverage is per instrument, and liquidation can be partial and isolated. Spot is a second universe with its own price budget. - Trigger orders and TWAP, the two order types the venue works for you, and both client-side approximations flattered. A stop rests off the book under its own Untriggered status, because a resting stop invents depth, and it fires on the mark for the same reason margin does. A TWAP is sliced into equal children every thirty seconds through the ordinary matching path, so the average it reports is one somebody could have got. - Speed, where measurement put it and not where it was assumed: hot maps key on a dense slot rather than an Arc<str> and an outcome, the callback context is built only when the callback asked for it, three quadratic scans are gone, and the persisted run's overhead turned out to be fsync. Storage - The fixed-point raw type is switchable, so a wide build computes in i128 with the narrowings checked rather than wrapping. Both modes pass the same suites, and CI now builds the wide mode, which it never did, so it cannot rot silently. Wheels can ask for it with `maturin build --features wide` and report h5i_db.FIXED_POINT_BITS, read from the type's own size. - A table chooses how it stores fixed point. Decimal128(38, 9) holds what a wide build can compute, where f64 is exact only to 2^53 raw units, about nine million. Readers dispatch on the array they are handed, so one build reads both encodings and no catalog is split in two by how it was compiled. Float stays the default, and Decimal128 columns prune on min/max. Data on-ramp - Hyperliquid: per-coin metadata, the live payloads, and the archive (L2 books, the asset_ctxs mark and oracle history, real prints), each validated against a real file, which is how the look-ahead bug in the archive reader was found. - Kalshi: archive ingest, the two bid books folded into one two-sided book, and the handshake confirmed against production. - Limitless and Opinion layouts, Manifold and series feeds, Predexon's Kalshi orderbook history, a corporate_actions table, bulk trade dumps, and a canonical bars on-ramp. - h5i_db.capture: a websocket recorder for the data no archive sells. Research - result.report() renders a whole run as one self-contained HTML page instead of a JSON dump. Trials sort and tick for side-by-side comparison against a "no trading" baseline row, a parameter pivot groups them by the dimension the sweep varied, and repeated engine warnings collapse to a count. Colour is never the only carrier, and gain and loss are luminance-matched so a column of losses does not whisper while gains shout. Docs: a front page split into a database half and a backtester half, a Perpetuals section covering the three prices and the two margin policies, a backtest in the quickstart, three cookbook sections the build had been dropping, and a navigable roadmap.
v0.1.2
Backtesting reaches the vendor data plane. Engine - Refuse a book snapshot event whose rows mix instruments or outcomes. Before, the instrument and outcome came from the event's first row and the rest were folded into that book, so a YES buy could lift an ask belonging to NO with no error anywhere. Data on-ramp (new: h5i_db.venues) - Vendor Parquet archives into the canonical tables. A vendor dialect is an ArchiveLayout literal, not a code path: nested, flat and JSON-payload level shapes, with PMXT, Telonex and Kaggle layouts shipped. - Commits are keyed by the hash of the normalised rows, so re-running an import replays instead of duplicating and an interrupted backfill is safe to restart. - Requested and loaded windows stay separate facts; unknown event types, unusable files and depth truncation are reported, never silent. - Market definitions from vendor JSON, with positional outcome/token identity refused when ambiguous. Research - Walk-forward folds scored by median, and a TopK policy that spends the holdout on a shortlist ranked on train. - Random and TPE search beside the default grid, with Range for continuous axes. - Basket reports over many run forks, rendered from stored tables only. - Brier advantage, decomposition and reliability curves. - Eleven strategies as signal generators, plus account-ledger replay. New crates: h5i-db-backtest, h5i-db-venues. Docs: backtest, quant and data-on-ramp references for the agent skill, with a test that resolves every symbol the skill names against the real modules.
v0.1.1
Forks are the headline: an O(1), zero-copy writable workspace over a pinned
base, so an agent can branch a database the way it branches a repo. Nested
forks, batch create/drop for wide fanouts, metadata-only diff, compare-and-swap
promote, and a forks('table') table function that reads every branch at once.
Also in this release:
- A live fork monitor in the review UI, pushed over SSE, with the shell rebuilt
around an attention rail: what needs a human, what is running, what is merely
true.
- arrival-delta (formerly leakage-check): re-run a query at two read points and
report how much the answer moved. A measurement, not a verdict.
- Rolling and cross-sectional operators DataFusion lacks, and a lazy DataFrame
builder for Python.
- Research-mode pins now hold through the table functions.
- Version-history listing, ingest statistics, and segment encoding no longer
pay avoidable I/O, allocations, or runtime-worker time.