Skip to content

v0.13.0

@opticsWolf opticsWolf tagged this 15 Aug 20:28
Crate macrame-db 0.13.0, wheel 0.13.0, schema v11 unchanged since 0.12.6. No
rung and no breaking API change; a 0.12.x database opens with nothing to do.
Six waves, W1 through W6, plus §8's acceptance.

The release in one line: nothing in this crate had ever run ANALYZE, so every
query was costed against SQLite's built-in guesses -- an estimate that depends
on how many columns a query binds rather than on what the table holds. That is
this schema's worst recurring defect (D-042, D-059, D-064: a covering index
captures a query because it contains the columns, not because it discriminates)
standing as a permanent condition. analyze() and optimize() close it, close()
runs the second, and index_plan_tests now pins plans against a populated,
analysed fixture as well as an empty one.

Also here: the actor's metrics became a default feature, because a crate
organised around a latency bound must not ship a default build that cannot
report whether the bound is met (D-154). Rehydrate and Checkpoint report as
themselves instead of borrowing a neighbour's kind. The handle gained Tuning,
open_tuned, checkpoint() with frame counts, wal_autocheckpoint, and split
writer/reader page caches. Python reached parity in the same release that
created what it had to reach -- six constants, the vector registry's read side,
the maintenance calls, the tuning keywords, and a clock seam so the suite can
finally assert on recorded_at at all.

Three findings are corrections to this project's own documents, and they are
the part worth reading:

analysis_limit does not do what D-149 claimed. §8 asked for its bound measured
rather than asserted, and the measurement refuted the claim it was checking.
The pragma is in force and worth 3-4x, but what remains still grows with the
table: analyze() holds the write lock 19.1 ms at 40,000 edges against a 3 ms
budget. metrics().budget_violations() had been naming it since 0.12.4. The
instrument worked and nobody had read it. It stays counted rather than exempted,
because the kind also covers the optimize() that close() runs unprompted
(D-166, D-168).

as_of(ts) is not purely valid-time and the README said it was. The same ts is
compared to links.valid_from/valid_to for topology and to
transaction_log.recorded_at for concept attributes, so a title corrected today
to fix a 2020 typo comes back uncorrected from as_of("2020-06-01"). Stated a
release before it is changed, deliberately: the fix changes answers callers
depend on and belongs to a release allowed to break them (D-160, W7.1 in
0.14.0).

checkpoint()'s rustdoc had described rebuild_current since 0.12.13, and
rebuild_current had none. Two methods wrong from one edit, past a gate that
checks whether a method is named in Appendix A but not whether it has a doc
comment (D-167).

Two gates added for defects that reached a release with everything green: a
rustdoc-presence check on the handle's methods, and cargo check
--no-default-features --all-targets, after an example added as evidence during
this wave broke the feature-off build for two releases past an acceptance item
checked one release earlier (D-169).

391 Rust across 34 targets, 377 with --no-default-features, 381 Python, 23
property tests in their own step. clippy clean under --all-features. Decisions
D-001...D-169.
Assets 2
Loading