mirror of
https://github.com/bitcoinresearchkit/brk.git
synced 2026-06-30 14:08:34 -07:00
changelog: updated
This commit is contained in:
@@ -6,6 +6,233 @@ All notable changes to the Bitcoin Research Kit (BRK) project will be documented
|
||||
|
||||
> *This changelog was generated by Claude Code*
|
||||
|
||||
## [v0.3.6](https://github.com/bitcoinresearchkit/brk/releases/tag/v0.3.6) - 2026-06-27
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
#### `website`
|
||||
|
||||
- Fixed chart PNG export metadata by deriving the share title and download filename from the chart heading, producing named files such as `bitview-{chart-id}.png` instead of anonymous blob exports ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.6/website/scripts/utils/chart/capture.js))
|
||||
- Fixed chart PNG export on iPhone, iPad, and iPadOS desktop user agents by treating touch-capable Mac user agents as iOS and creating the PNG blob through a synchronous data-URL path on that platform, giving mobile Safari a reliable capture payload ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.6/website/scripts/utils/env.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.6/website/scripts/utils/chart/capture.js))
|
||||
- Fixed mobile chart export delivery by routing iOS captures through the Web Share sheet when file sharing is available, allowing users to save or share generated chart PNGs through the native browser flow ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.6/website/scripts/utils/chart/capture.js))
|
||||
- Fixed popup-blocked chart exports by falling back to a named download link when `window.open` cannot open the PNG blob, preserving a working export path for browsers that block new blob tabs ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.6/website/scripts/utils/chart/capture.js))
|
||||
- Fixed exported PNG object URL lifetime by tracking opened blob URLs and revoking them on `pagehide` instead of shortly after opening, preventing exported image tabs from losing their blob before loading while still cleaning URLs when the page unloads ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.6/website/scripts/utils/chart/capture.js))
|
||||
|
||||
### Internal Changes
|
||||
|
||||
#### `clients`
|
||||
|
||||
- Regenerated the generated JavaScript client documentation so TypeDoc source links point at the released generated client snapshot, keeping documentation navigation aligned with the shipped client artifact ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.6/modules/brk-client/docs/classes/BrkClient.md))
|
||||
|
||||
[View changes](https://github.com/bitcoinresearchkit/brk/compare/v0.3.5...v0.3.6)
|
||||
|
||||
## [v0.3.5](https://github.com/bitcoinresearchkit/brk/releases/tag/v0.3.5) - 2026-06-23
|
||||
|
||||
### New Features
|
||||
|
||||
#### `brk_types`
|
||||
|
||||
- Added `AddrHashPrefixMatches`, a serializable response type carrying the requested address type, normalized hash prefix, truncation flag, and matched addresses so prefix-search results have a stable API shape ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_types/src/addr_hash_prefix_matches.rs))
|
||||
- Added a public `AddrHash::new(u64)` constructor, allowing query code to build typed lower and upper hash bounds for address-prefix range scans without untyped numeric casts ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_types/src/addr_hash.rs))
|
||||
|
||||
#### `brk_query`
|
||||
|
||||
- Added `Query::addr_hash_prefix_matches(addr_type, prefix)`, which validates address output types, accepts 1 to 16 hexadecimal prefix nibbles, range-scans address payload hashes, skips entries beyond safe index lengths, returns up to 100 candidate addresses, and sets `truncated` when a bucket is too large. Wallet clients can use this to discover anonymity-set candidates without sending raw addresses or xpubs to a public server ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_query/src/impl/addr/hash_prefix.rs))
|
||||
|
||||
#### `brk_server`
|
||||
|
||||
- Added `GET /api/address/hash-prefix/{addr_type}/{prefix}` with typed path parameters, tip caching, OpenAPI metadata, and `AddrHashPrefixMatches` JSON output, exposing the new prefix-search query through the HTTP API for wallet discovery clients ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_server/src/api/addrs.rs), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_server/src/params/addr_hash_prefix_param.rs))
|
||||
|
||||
#### `brk_client`
|
||||
|
||||
- Added the Rust client method `get_address_hash_prefix_matches(addr_type, prefix)`, giving Rust callers typed access to the address hash-prefix endpoint without constructing the URL by hand ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_client/src/lib.rs))
|
||||
|
||||
#### `clients`
|
||||
|
||||
- Added generated JavaScript and Python `AddrHashPrefixMatches` / `AddrHashPrefixParam` types and `getAddressHashPrefixMatches` / `get_address_hash_prefix_matches` methods, giving browser and Python consumers direct access to the new wallet-discovery endpoint ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/modules/brk-client/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/packages/brk_client/brk_client/__init__.py))
|
||||
- Published generated client documentation for the address hash-prefix endpoint and its request/response types, making the new API discoverable from the shipped JavaScript and Python docs ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/modules/brk-client/docs/interfaces/AddrHashPrefixMatches.md), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/packages/brk_client/DOCS.md))
|
||||
|
||||
#### `website_next`
|
||||
|
||||
- Added the `/wallets` route, Home link, stylesheet imports, and dialog support for the Wallets page, allowing users to open the watch-only wallet workspace from the next website navigation ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/routes.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/home/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/index.html))
|
||||
- Added an encrypted persistent wallet vault stored in the browser with password-based create, unlock, lock, reset, add-wallet, and delete-wallet flows, so watch-only wallet sources can persist locally without server storage ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/vault/encryption.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/vault/storage.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/vault/index.js))
|
||||
- Added a temporary vault mode that keeps imported wallets out of browser storage and can be cleared from the session controls, giving users a no-persistence option for one-off wallet checks ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/start/temporary.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/vault/index.js))
|
||||
- Added the Add Wallet dialog with name and source fields, xpub or descriptor extraction from pasted text, source redaction, and validation by deriving the first address before saving, preventing unsupported watch-only sources from entering the vault ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/add/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/add/source.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/index.js))
|
||||
- Added horizontal wallet selection with scroll snapping, add buttons, lock/clear controls, and hold-to-delete or hold-to-reset actions, making multi-wallet navigation and destructive actions available without accidental single-click deletion ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/selector/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/hold/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/start/reset/index.js))
|
||||
- Added a privacy redaction system for wallet sources, balances, dates, txids, and addresses, including a page-level Privacy/Reveal toggle that keeps sensitive values masked during wallet viewing ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/redaction/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/amount/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/index.js))
|
||||
- Added browser-side parsing for `xpub`, `ypub`, `zpub`, `tpub`, `upub`, and `vpub` keys plus non-hardened BIP32 public derivation, allowing the Wallets page to derive watch-only receive, change, and direct branches locally ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/derive/key.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/derive/bip32.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/derive/index.js))
|
||||
- Added browser-side address encoding and crypto helpers for Base58Check, Bech32, Bech32m, SHA-256, RIPEMD-160, HMAC-SHA512, secp256k1 public-key tweaks, P2PKH, nested P2WPKH, native P2WPKH, and P2TR address generation, keeping single-key wallet derivation on the client device ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/derive/address.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/derive/hash.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/derive/secp256k1.js))
|
||||
- Added `wsh(sortedmulti(...))` descriptor support with checksum stripping, origin metadata tolerance, ranged non-hardened paths, receive/change descriptor selection, network consistency checks, BIP-sorted multisig script construction, and native P2WSH address generation, allowing multisig watch-only descriptors to be scanned from the browser ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/derive/descriptor.js))
|
||||
- Added wallet scanning across supported scripts and branches with a 10-unused-address gap limit, a 1,000-address scan ceiling, progress messages, cached runtime results, BTC/USD price loading, and next receive-address selection based on observed activity, so wallet scans can stop predictably and present a usable receive address ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/scan/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/scan/branches.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/vault/runtime.js))
|
||||
- Added public-server wallet lookup through RapidHash v3 address-payload prefixes, expanding from 4 to 16 prefix nibbles until the returned bucket is not truncated; local and private servers use direct address lookups instead. This lets public scans fetch metadata for anonymity-set buckets while local scans avoid unnecessary bucket work ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/lookup/bucket.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/lookup/hash.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/lookup/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/lookup/local.js))
|
||||
- Added the wallet summary panel with total BTC balance, USD value from the live price endpoint, and redaction-aware amount rendering, giving users an immediate portfolio-level view after a scan completes ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/summary/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/amount/index.js))
|
||||
- Added a Receive dialog for the selected next receive address, including branch/index labeling, a `bitcoin:` QR code, grouped address rendering, copy-to-clipboard handling, and close-on-backdrop behavior ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/receive/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/address/index.js))
|
||||
- Added the History tab, which loads transactions for used wallet addresses, caches bucket histories, de-duplicates transactions by txid, groups confirmed transactions by date and mempool transactions separately, classifies receive/send/consolidation activity, and shows expandable fee, txid, and involved-address details ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/history/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/history/cache.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/history/transaction.js))
|
||||
- Added the Holdings tab, which loads UTXOs for positive-balance wallet addresses, caches bucket UTXO responses, treats missing addresses as empty, sorts spendable outputs by value, and displays confirmed or mempool outpoints with their owning wallet address ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/holdings/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/holdings/cache.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/holdings/utxo.js))
|
||||
- Added the Addresses tab, listing used wallet addresses with branch labels, derivation indexes, balances, transaction counts, grouped redaction-aware address text, and anonymity-set sizes so users can inspect what the scan found and how private each public lookup bucket was ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/addresses/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/wallet/address/index.js))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
#### `brk_bindgen`
|
||||
|
||||
- Fixed generated JavaScript client base URL parsing by resolving the configured base URL with `URL` and browser `location.href` fallback, allowing relative API roots and exposing a reliable parsed domain for client-side local/public server decisions ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_bindgen/src/generators/javascript/client.rs))
|
||||
|
||||
#### `clients`
|
||||
|
||||
- Applied the JavaScript base URL parsing fix to the shipped generated browser client, so consumers can instantiate the client with relative paths while `client.url` and `client.domain` still resolve to normalized values ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/modules/brk-client/index.js))
|
||||
|
||||
### Internal Changes
|
||||
|
||||
#### `brk_query`
|
||||
|
||||
- Split address query code into focused `activity`, `hash_prefix`, `mempool`, `resolve`, `stats`, `txs`, and `utxos` modules while keeping the existing address stats, transaction, UTXO, mempool, and last-activity query behavior available through the same `Query` methods ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_query/src/impl/addr/mod.rs), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/crates/brk_query/src/impl/addr/resolve.rs))
|
||||
|
||||
#### `website_next`
|
||||
|
||||
- Replaced the embedded `website_next` generated client copy with a link to the workspace `modules` directory and excluded that module link from TypeScript checking, keeping the next website on the shared generated client bundle used elsewhere in the workspace ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/modules), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/tsconfig.json))
|
||||
- Added shared wallet UI primitives for buttons, link-buttons, input fields, dialogs, busy states, status messages, number formatting, BTC amount rendering, redaction synchronization, and hold-to-confirm actions, giving the Wallets page reusable behavior for its vault, scanner, and wallet detail panels ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/styles/main.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/dialog/style.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/dom.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.5/website_next/wallets/format.js))
|
||||
|
||||
[View changes](https://github.com/bitcoinresearchkit/brk/compare/v0.3.4...v0.3.5)
|
||||
|
||||
## [v0.3.4](https://github.com/bitcoinresearchkit/brk/releases/tag/v0.3.4) - 2026-06-14
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
#### `brk_client`
|
||||
|
||||
- Changed the generated `SeriesTree_Cohorts_Utxo_Lth_Realized.sopr` Rust field to use the shared `RatioValuePattern2` type. Code that names the generated concrete SOPR struct must use `RatioValuePattern2`, while `.sopr.ratio` and `.sopr.value_destroyed` access still point to the same series paths ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_client/src/lib.rs))
|
||||
|
||||
#### `clients`
|
||||
|
||||
- Changed the generated JavaScript and Python LTH realized SOPR node to the shared `RatioValuePattern2` shape. Consumers that refer to generated type or class names must use the shared pattern name, while existing ratio and value-destroyed property access remains available ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/modules/brk-client/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/packages/brk_client/brk_client/__init__.py))
|
||||
|
||||
### New Features
|
||||
|
||||
#### `brk_cohort`
|
||||
|
||||
- Added immutable entry-price cohorts through `EntryPrice`, `ByEntry`, `ENTRY_FILTERS`, and `ENTRY_NAMES`, creating the `Veteran`/`Rookie` cohort pair for coins created at a discount or premium to the entry anchor ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_cohort/src/by_entry.rs))
|
||||
- Added `Filter::Entry` and wired entry cohorts into UTXO cohort construction, iteration, mutable iteration, parallel iteration, and separate cohort traversal so all UTXO cohort consumers can discover and compute entry cohorts through the same traversal APIs as term, age, class, epoch, amount, and type cohorts ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_cohort/src/filter.rs), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_cohort/src/utxo.rs))
|
||||
- Marked entry cohorts as extended UTXO cohorts and kept their display names unprefixed, giving Veteran/Rookie the same realized-cap, ratio, percentile, and cost-basis metric coverage as the extended aggregate cohorts without adding context prefixes to chart labels ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_cohort/src/filter.rs), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_cohort/src/cohort_context.rs))
|
||||
|
||||
#### `brk_computer`
|
||||
|
||||
- Added entry cohort computation to the distribution block loop by classifying each block's new UTXOs against the previous all-cohort capitalized price. This creates the data foundation for comparing coins born below the realized valuation anchor with coins born above it ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/compute/block_loop.rs))
|
||||
- Stored each UTXO's entry cohort in `BlockState` and applied receives, spends, and zero-value supply adjustments to the matching entry cohort, keeping Veteran/Rookie membership immutable for the full lifetime of a UTXO ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/state/block.rs), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/cohorts/utxo/receive.rs), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/cohorts/utxo/send.rs))
|
||||
- Rebuilt entry cohort state during distribution resume from stored capitalized price history and passed the correct entry anchor into resumed block processing, so restarted indexing keeps the same Veteran/Rookie classifications as a clean run ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/vecs.rs))
|
||||
- Included entry cohorts in UTXO cohort import, iteration, compute-rest execution, and vector collection, making entry metrics part of the persisted distribution dataset instead of an in-memory-only classification ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/cohorts/utxo/groups.rs))
|
||||
- Added entry-aware cost-basis support to the Fenwick cache by tracking the discount-entry partition, deriving premium as all coins minus discount coins, and pushing Veteran/Rookie cost-basis percentiles plus density values for charting cost-basis concentration by entry cohort ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/cohorts/utxo/fenwick.rs), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/cohorts/utxo/percentiles.rs))
|
||||
- Returned the all-cohort capitalized price from realized metric accumulation and used it as the next block's entry anchor, tying entry classification directly to the computed capitalized-price series that users can inspect ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/metrics/realized/full.rs), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_computer/src/distribution/cohorts/utxo/groups.rs))
|
||||
|
||||
#### `brk_bindgen`
|
||||
|
||||
- Exported `ENTRY_NAMES` from generated constants, allowing Rust, JavaScript, Python, and website code to use the same Veteran/Rookie IDs and labels as `brk_cohort` ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_bindgen/src/generate/constants.rs))
|
||||
|
||||
#### `brk_client`
|
||||
|
||||
- Added the generated Rust client tree under `series.cohorts.utxo.entry.discount` and `series.cohorts.utxo.entry.premium`, exposing Veteran/Rookie supply, outputs, activity, realized metrics, cost basis, unrealized values, and invested capital through typed client accessors ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_client/src/lib.rs))
|
||||
- Added `RatioValuePattern2` for SOPR ratio plus value-destroyed access, giving entry cohorts and the LTH realized SOPR node one shared typed pattern for SOPR series reads ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/crates/brk_client/src/lib.rs))
|
||||
|
||||
#### `clients`
|
||||
|
||||
- Added generated JavaScript and Python access to `cohorts.utxo.entry.discount` and `cohorts.utxo.entry.premium`, so browser and Python consumers can fetch Veteran/Rookie entry cohort metrics without hand-building series names ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/modules/brk-client/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/packages/brk_client/brk_client/__init__.py))
|
||||
- Published generated client documentation for `ENTRY_NAMES`, the entry cohort tree, Veteran/Rookie realized-price nodes, and the shared SOPR ratio/value-destroyed pattern, making the new client surface discoverable from the shipped docs ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/packages/brk_client/DOCS.md), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/modules/brk-client/docs/interfaces/SeriesTree_Cohorts_Utxo_Entry.md))
|
||||
|
||||
#### `website`
|
||||
|
||||
- Added a Distribution `Entry` folder with a `Veteran vs Rookie` comparison and individual Veteran/Rookie cohort folders, letting website users chart entry cohorts with the same NUPL, realized, unrealized, supply, and cohort metric views used by existing distribution folders ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website/scripts/options/partial.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website/scripts/options/distribution/data.js))
|
||||
|
||||
#### `website_next`
|
||||
|
||||
- Changed the Home and header experience so the fixed header carries only the bitview brand link while Home presents direct Explore, Learn, and Build links. This makes the first screen the entry point for section selection instead of duplicating primary navigation in the header ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/home/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/header/index.js))
|
||||
- Added route canonicalization, hash-preserving route navigation, per-page `pageactive` events, and Cloudflare SPA asset fallback configuration, allowing direct deep links and client-side route transitions to land on the intended page state ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/routes.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/main.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/wrangler.toml))
|
||||
- Replaced the placeholder Learn taxonomy with data-backed Introduction, Supply, UTXO Set, Address Count, Mining Pools, and Capitalization sections, turning Learn into a smaller set of populated sections rather than a broad menu with placeholder charts ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/sections/introduction.js))
|
||||
- Added Supply Learn charts for circulating supply, profitability, exposed public-key supply, exposed supply by type, term, age, UTXO balance, address balance, output type, halving epoch, and creation-year class, giving readers direct chart access to supply composition and exposed-key risk ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/sections/supply.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/supply.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/cohorts.js))
|
||||
- Added UTXO Set Learn charts for total set size, net change, growth rate, spent outputs, spending rate, spending rate by term/age/balance/type/epoch/class, and UTXO count distribution by the same cohort groups, making set turnover and set composition readable from one section ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/sections/utxo-set.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/utxo-set.js))
|
||||
- Added Address Count Learn charts for funded addresses, new addresses, funded-address change, funded-address growth rate, active/sending/receiving/bidirectional/reactivated addresses, funded/empty/total state, balance cohorts, address type cohorts, and reuse signals, covering address-set growth, activity, distribution, and privacy-relevant reuse in the guide ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/sections/address-count.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/address-count.js))
|
||||
- Added Mining Pools Learn charts for major pool dominance, major pool blocks mined, major pool rewards, per-major-pool dominance/blocks/rewards, and minor pool dominance/blocks, giving readers a charted view of mining concentration and attributed block production ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/sections/mining-pools.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/mining-pools.js))
|
||||
- Added Market Cap and Realized Cap Learn charts with splits by profitability, term, age, UTXO balance, address balance, output type, halving epoch, and creation-year class, allowing valuation comparisons across the same cohort dimensions used in supply views ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/sections/capitalization.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/sections/capitalization/market.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/sections/capitalization/realized.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/capitalization.js))
|
||||
- Added collapsible Learn sections with persisted open state, synchronized contents-sidebar state, hash-driven ancestor opening, and active-hash toggling, so readers can keep long sections collapsed while preserving deep-link behavior ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/details.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/hash-links.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/index.js))
|
||||
- Added path-based Learn section IDs, nested contents entries, and scroll-spy navigation that keeps the current hash and contents sidebar aligned with the visible nested section, making repeated titles such as `Type` or `Balance` safe to deep link ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/path.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/contents/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/scroll-spy.js))
|
||||
- Added chart lifecycle management with near-viewport activation, suspension when charts leave view, cached timeframe loading, loading status, and error status, reducing unnecessary chart work while keeping visible Learn charts responsive ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/intersection.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/loader.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/renderer.js))
|
||||
- Added Learn chart controls for area view, line view, stacked view, bar view, dot view, linear/log scale, ascending/descending series order, unit-aware formatting, and persisted per-chart settings, giving readers more ways to inspect the same series without leaving the chart ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/views.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/area/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/scale.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/order.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/units.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/setting.js))
|
||||
- Added clickable/pinned legend highlighting, preview highlighting from chart scrub position, scrubber shade, scrubber markers, unit-aware readouts, and keyboard scrub controls, making multi-series Learn charts inspectable by date and by selected cohort ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/legend/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/highlight.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/scrubber/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/format.js))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
#### `website`
|
||||
|
||||
- Fixed root website reads of generated price series by changing `brk.series.prices` callers to `brk.series.price`, restoring market option construction and chart-pane live price overlays against the generated client tree ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website/scripts/options/market.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website/scripts/panes/chart.js))
|
||||
|
||||
#### `website_next`
|
||||
|
||||
- Fixed route clicks with trailing slashes and route-plus-hash targets by resolving canonical paths before navigation and preserving the hash in the pushed route, so links such as `/learn#supply` open the expected page and section ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/routes.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/main.js))
|
||||
- Fixed plain-click detection to respect `Alt`-click and made event-target lookup safe for non-Element event targets, preserving browser modifier behavior and preventing `.closest()` calls on unsupported targets ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/utils/event.js))
|
||||
- Fixed generated anchor IDs by replacing non-alphanumeric runs and trimming leading or trailing separators, preventing punctuation in headings from producing fragile Learn deep-link IDs ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/utils/id.js))
|
||||
- Fixed Learn chart fullscreen button state by listening for fullscreen changes on the target element, keeping the control state tied to the chart that entered or exited fullscreen ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/fullscreen.js))
|
||||
|
||||
### Internal Changes
|
||||
|
||||
#### `website`
|
||||
|
||||
- Replaced the checked-in `website/scripts/modules` vendor tree with a link to the workspace `modules` directory, making the root website consume the same local client and browser modules as the rest of the repository ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website/scripts/modules))
|
||||
|
||||
#### `website_next`
|
||||
|
||||
- Split Learn chart code into renderer, loader, plot dispatcher, scale, order, setting, series-path, area, legend, scrubber, math, and type declaration modules, keeping chart loading, chart settings, plotting, and interaction code in focused files for future chart work ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/renderer.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/plot.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/types.d.ts))
|
||||
- Split Learn data definitions into reusable cohort, group, rolling-window, supply, UTXO set, address-count, mining-pool, capitalization, and section modules, making each Learn topic source its chart series from named data builders instead of one monolithic data file ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/cohort-series.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/groups.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/data/types.d.ts))
|
||||
- Split Learn chart CSS into control, legend, scrubber, and area styles, and changed Learn page styling for nested collapsible headings, sidebar scroll alignment, chart fullscreen layout, and chart loading states so the larger nested guide remains navigable and readable ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/controls/style.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/legend/style.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/charts/scrubber/style.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/style.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/learn/contents/style.css))
|
||||
- Changed the shared `website_next` visual foundation to a dark-only variable set with selection colors, thin scrollbars, inherited textarea fonts, `h4` serif headings, and zero-duration reduced-motion transitions, aligning base styles with the next website's Learn and Home layouts ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/styles/variables.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/styles/main.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/styles/reset.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/styles/fonts.css), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/index.html))
|
||||
- Added local contributor guidance favoring `@type {const}` with inference for literal data structures, matching the new Learn data and chart setting style ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.4/website_next/AGENTS.md))
|
||||
|
||||
[View changes](https://github.com/bitcoinresearchkit/brk/compare/v0.3.3...v0.3.4)
|
||||
|
||||
## [v0.3.3](https://github.com/bitcoinresearchkit/brk/releases/tag/v0.3.3) - 2026-06-06
|
||||
|
||||
### New Features
|
||||
|
||||
#### `workspace`
|
||||
|
||||
- Added `cycle-dca-sim.mjs`, a Bitview-backed BTC cycle DCA simulator that fetches daily price, all-time-high, halving epoch, and cost-basis percentile series; simulates p50-triggered DCA-in, p100 or percentile-triggered DCA-out, configurable cash reserves, buy weights, sell bands, ATH exits, custom start dates, and table or CSV output; and reports results against lump-sum and simple daily-DCA benchmarks so strategy research can be repeated from the command line ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/scripts/cycle-dca-sim.mjs))
|
||||
- Added `cycle-dca-sweep.mjs`, a grid-search tool that tests buy-weight curves and sell multiples across monthly or explicit start dates, then ranks candidates by average, median, and worst performance against DCA and lump-sum baselines so cycle-rule parameters can be compared systematically ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/scripts/cycle-dca-sweep.mjs))
|
||||
|
||||
#### `website_next`
|
||||
|
||||
- Added a route registry for Home, Explore, Learn, and Build pages, then generated the primary header navigation from that registry so route validation, active nav state, and page construction use one path map ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/routes.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/header/index.js))
|
||||
- Added page caching, hidden/inert inactive pages, same-origin left-click route interception, browser back/forward rendering, and transition/reveal overlay handling so the next website behaves as a client-side app without recreating pages on every navigation ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/main.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/utils/transition.js))
|
||||
- Bundled the generated JavaScript BRK client inside `website_next` and added a `https://bitview.space` client wrapper, giving the next website direct access to typed BRK series endpoints without depending on the root website client bundle ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/modules/brk-client/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/utils/client.js))
|
||||
- Rebuilt the Learn page as a structured article with generated section IDs, nested sections, a contents sidebar, smooth same-page hash navigation, popstate hash restoration, scroll-spy `aria-current` state, and URL hash replacement for the currently visible section, making the learning guide navigable by deep link and keyboard-friendly anchors ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/contents/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/hash-links.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/scroll-spy.js))
|
||||
- Added data-backed Learn chart definitions for circulating supply, supply in profit and loss, STH versus LTH supply, supply by age, supply by UTXO balance, supply by address balance, supply by script type, supply by halving epoch, and supply by creation-year class, while keeping the broader Learn taxonomy for Capitalization, Activity, Mining, Market, Ownership, Liquidity, Risk, Cycles, and Cohorts in the same section model ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/data.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/cohorts.js))
|
||||
- Added reusable SVG chart rendering for Learn charts with lazy first-intersection loading, per-chart request caching, responsive viewBox sizing, timeframe controls for intraday through all-history ranges, chart view controls for line, stacked, reversed stacked, bar, reversed bar, and dot views, local storage persistence for chart controls, and a fullscreen toggle for individual figures ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/timeframes.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/views.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/fullscreen.js))
|
||||
- Added interactive Learn chart legends, series highlighting, formatted value readouts, pointer and keyboard scrubber controls, and line, stacked-area, bar, and dot plot renderers so readers can compare cohort values at a selected date and switch chart forms without losing context ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/legend.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/highlight.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/scrubber.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/line/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/stacked/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/bar/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/dots/index.js))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
#### `brk_client`
|
||||
|
||||
- Fixed the Rust client basic example to use `client.series().price.split.close.usd`, so the documented example follows the generated series tree instead of referencing a nonexistent `prices` branch ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/crates/brk_client/examples/basic.rs))
|
||||
|
||||
#### `website`
|
||||
|
||||
- Fixed chart PNG capture to place the screenshot at its real chart offset inside the pane, render the visible title with its computed font styling, wrap top and bottom legend rows to the available legend width, preserve multi-color swatches, honor selected option text and text transforms, and draw the page background plus host watermark so exported charts match the on-page composition ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website/scripts/utils/chart/capture.js))
|
||||
- Fixed stale chart legend prefixes by adding a `clearPrefix()` path and calling it when a pane has no units, so a chart that renders without a unit selector no longer inherits the previous chart's prefix or separator ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website/scripts/utils/chart/legend.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website/scripts/utils/chart/index.js))
|
||||
|
||||
### Internal Changes
|
||||
|
||||
#### `clients`
|
||||
|
||||
- Regenerated the generated JavaScript and Python client artifacts and TypeDoc files for the release snapshot, keeping shipped client packages and documentation synchronized with the generated API surface used by the website work ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/modules/brk-client/index.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/packages/brk_client/brk_client/__init__.py))
|
||||
|
||||
#### `website_next`
|
||||
|
||||
- Split Learn chart behavior into small modules for series config, SVG element creation, path construction, value formatting, storage, radio controls, lazy intersection loading, viewBox sizing, and color lookup, making the chart stack reusable across Learn sections without duplicating rendering code ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/config.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/path.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/learn/charts/radio.js), [source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/utils/colors.js))
|
||||
- Tightened the local `website_next` contributor guidance around speed, memory use, composition, and maintainable file boundaries so future work on the next website has clearer implementation constraints ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/website_next/AGENTS.md))
|
||||
|
||||
#### `workspace`
|
||||
|
||||
- Allowed the root `btc-cycle-sim.html` artifact to be tracked despite the root HTML ignore rule, enabling the BTC cycle simulator page to live at the repository root when it is added ([source](https://github.com/bitcoinresearchkit/brk/blob/v0.3.3/.gitignore))
|
||||
|
||||
[View changes](https://github.com/bitcoinresearchkit/brk/compare/v0.3.2...v0.3.3)
|
||||
|
||||
## [v0.3.2](https://github.com/bitcoinresearchkit/brk/releases/tag/v0.3.2) - 2026-06-04
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
Reference in New Issue
Block a user