Skip to content

v4.14.0

Choose a tag to compare

@github-actions github-actions released this 08 Oct 04:57
· 256 commits to main since this release
d7dd6a3

Nuthatch 4.14.0 adds maintained views, keeps a view's own ORDER BY, and fixes two pieces of release
tooling. There is no storage migration, and a nest that declares no maintained view behaves exactly as on
4.13.0.

Maintained views (RFC-0062)

A nest can list views in a new maintained.toml. A maintained view is evaluated exactly as a request would
evaluate it and stored under maintained/, keyed on every input it read: the binary and engine, the
authored files, the schema and sealed segments of the tables it reaches, and their hot rows. A request
reads the stored copy only when its own inputs hash to that key, and otherwise answers from the view as
before, so a copy can never be stale or differ. Copies are rebuilt after a commit or seal reaches the tip,
never on the commit or seal path, and a newer state always wins over a queued older one (#1977, #1979).

  • maintained.toml is outside the data identity, so a nest still seeds from the mirror. Copies of a view
    no longer declared are removed.
  • A view that cannot be maintained (a volatile function, an incremental entity, offchain data, labels,
    a name that is not a plain identifier) stops the nest at load and fails nuthatch check, by name.
  • Metrics nuthatch_maintained_* and per-view counters on /ready appear only on a nest that declares one.

On the BetSwirl stopgap nest (160,802 bets, ThinkPad, 2026-10-07) every SDK query shape answered in
0.02 to 0.76 s from copies, against 0.9 to 3.1 s computed, with byte-identical answers, including through
reorgs 1, 3 and 5 blocks deep. Tip lag was unchanged with a build after every commit. RFC-0062's S3
(check --maintained) and S4 were not pursued.

A view's ORDER BY is kept

An ORDER BY (and LIMIT) at the end of an authored view or a derived table now orders what is read from
it, whenever nothing above reorders the rows. Every earlier release silently dropped it (#1986, #1984).
A view that is joined, aggregated, unioned or windowed plans as before. An ordered view filtered by IN,
EXISTS or a correlated subquery, or read through unnest or row_number() OVER (), is still unordered.

Tooling

  • Lodestar parity now treats a collection by any collector other than GraphTallyCollector as a known
    difference, which is the network subgraph's own rule, and still fails on an unexplained row (#1985, #1983).
  • The nightly mutation check names a baseline entry stale only if that shard actually tested it (#1974).
  • The subgraph stopgap orphan alert also watches arbitrum-nova, soneium, kaia, botanix and monad-testnet (#1978).

Gated on Lodestar's data

The release gate passed on each change against v4.13.0 on the allocations nest copy: 75 of 75 answered,
none regressed, no answer differs, peak RSS inside the 2,048 MiB budget.

Compatibility and upgrade

Replace the binary and restart. No re-index. The view ORDER BY change can reorder rows a client read
from an ordered view without ordering itself; it now matches what the view says.