HartiiLabs docs

HartiiLabs

Versions & changelog

HartiiLabs ships behind one version number, kept in sync everywhere it's checked: package.json's version, the <meta name="application-version"> tag on every page, functions/_lib/version.js's APP_VERSION (surfaced by GET /api/health as version), and the newest dated entry in the app's own CHANGELOG.md — the app's test suite fails if any of these disagree.

SemVer

  • MAJOR — a breaking public API or live-protocol change, or a launch-factory generation cutover (e.g. V3 → V4). This is the only kind of release that can break an integration.
  • MINOR — a new capability or a measurable behaviour change (the 1.1.0 latency programme below is a MINOR release).
  • PATCH — a fix with no new surface.

Smart-contract generations (TokenFactory V1–V4) are a separate, immutable axis from the app version — a contract generation is superseded, never "versioned up." See Contracts overview.

Where to read the live version

GET /api/health → versionthe one-line check — see API reference
<meta name="application-version">on every page's <head>, same number
Git tag vX.Y.Zon the exact commit that's live; every version that goes live gets one

Changelog

A user-facing summary of the app's own CHANGELOG.md. Read the source file in the hartii-labs repo for the full, line-level history.

1.1.0 — 2026-10-02 — latency programme

Everything the app controls on the token page is now measured and tuned toward ≤ 300 ms end-to-end. Quai's own block cadence (1–3 s) and the wallet's popup are additive, out of the app's control, and shown as separate states rather than counted against that budget.

  • Reads go direct-RPC-first. rpc.quai.network/cyprus1 is the primary read path, with the /rpc/ proxy kept as failover.
  • Submitting a trade is 2 round-trips before the wallet popup, not 3. The gas estimate now overlaps the fresh on-chain quote instead of waiting on it to finish first.
  • The trade panel's preview is instant. A client-side mirror of the curve's own pricing math renders the buy/sell preview with no round trip at all; the real on-chain quote still gates what you actually sign.
  • Confirmations show up sooner. Once a trade is broadcast, receipt polling now backs off 0.5 s → 2 s (was 1 s → 4 s).
  • Live push is per-block instead of per-poll. The live hub subscribes directly to the chain (quai_subscribe logs + newHeads) and fans a trade out the moment its block lands, instead of waiting out a 4–15 s poll. The server-side switch was turned on the same evening (see 1.1.1 below); measured on a real trade, the chain's log notification reached the hub about 0.2 s before a 500 ms receipt poll even saw the receipt — see API reference › Live push.

1.4.0 — 2026-10-04 — market-maker tools v0

Read-only planning infrastructure for a future market maker — nothing in this release sends a transaction or quotes for real. See API reference › Market-maker tools and Market-maker tools for the full picture.

  • Read-only price reference. GET /api/token/:addr/reference depth-weights a token's bonding-curve/internal-pool price against its HartiiSwap WQUAI pair, with staleness/drift/thin flags and typed null placeholders for an external venue and a QUAI/Qi conversion venue still to come.
  • Quote preview and inventory bands. Deterministic, BigInt-safe primitives for a bid/ask preview (confidence limits, volatility-aware spread, signed inventory skew) and a 50/50 ± 15 % rebalance band — pure math, no I/O, no wallet.
  • Fills store and MM APIs. The planned QAXE/WQUAI pair registry, an mm_fills D1 table, FIFO P&L accounting, and the public GET /api/mm/{pairs,positions,fills,pnl} routes — every pair reports status: "planned", preview: true, maker: null throughout.
  • /mm preview page. Read-only dashboard (no navigation entry) showing the pair registry, vault inventory, fill history, and P&L. HARTII_LABS_MM_VAULT is optional; unset (the default on hartiilabs.com today) means every position reads back as unfunded and zeroed.
  • Holder paging. GET /api/token/:addr/holders now takes ?offset= and returns offset + nextOffset (null on the last page) so a consumer can page through every holder; still capped at 100 rows per call.

1.3.1 — 2026-10-04 — venue badge

  • Token pages for tokens launched on Quainance show a small "Quainance" badge next to the title (linking to the venue) instead of the earlier "not a HartiiLabs token" paragraph. Trade routing, chain reads and the graduation/price copy are unchanged.

1.3.0 — 2026-10-03 — latency programme, phase 3

  • Block frames are real now. Quai's newHeads notification nests the block under woHeader; 1.2.0 read the wrong field, so no head frame had ever been sent and pushed trades never carried blockTime. Fixed and fenced; one head frame per new block on the global channel.
  • The fast lane is reorg-safe. The indexer reconciles rows the hub wrote before finality and removes one only after that transaction's own receipt confirms it is gone; a candle bucket that loses its last trade is removed too. GET /api/token/<address>/trades and GET /api/trades/recent mark rows the indexer has not confirmed yet with provisional: true (absent once confirmed).
  • Latency metrics correct for hub↔browser clock skew (estimated from head frames).

1.2.0 — 2026-10-03 — latency programme, phase 2

  • One round trip before the wallet popup. The real send is priced with the app's exact mirror of the curve's quoteBuy/quoteSell after a single fresh on-chain read of the curve's state; the on-chain quote still runs afterwards to log any divergence, and the on-chain slippage floor is unchanged. (Build-time switch to restore the always-await path exists.)
  • Receipts confirm on the block, not on a timer. The hub broadcasts a head frame per chain block; a pending trade checks its receipt the moment one arrives (polling stays as fallback).
  • Live push for every curve. The sitewide feed sees every launched token's trades, not only the curves someone has open; new launches are picked up from the factories' TokenLaunched events the moment they happen.
  • Fresh page loads are ~1 s behind the chain, not 60–90 s. Pushed trades land in the indexed trades/candles immediately (the indexer still reconciles and remains the authority for holders).
  • Mobile: the live socket resumes and reconciles when a backgrounded tab comes back.
  • Operators: a debug-only "Latency (this browser)" panel on /status and a committed end-to-end measurement script (scripts/latency-e2e.mjs) in the app repo.

1.1.1 — 2026-10-02 — rollout fixes

  • The hub's upstream socket was being torn down ~8 s after opening by its own handshake timeout (trades silently fell back to the 10 s safety poll); fixed, and the upstream subscription has been on and stable since.
  • The application-version meta tag was missing from served pages (it sat inside the SEO block the edge rewrites per route); moved, so every page now carries the deployed version.

1.0.0 — 2026-10-02 — baseline

  • TokenFactoryV4 (LP Reserve) live on mainnet — the current launch factory.
  • Market-terminal redesign: grid-first home, /flow capital-flow terminal, one-page launch composer.
  • Wallet = signing only: every send is gas-estimated on the app's own read provider; a reverted receipt is always rejected, never reported as a success.
Quai Network mainnet · chain 9 · Cyprus-1. Figures marked "read on" a date were read from the chain that day; re-read before relying on them.