m8.7: performance (view cache + parallel aggregation)
The performance release, and the first tag to gather the post-roadmap programs that landed after m8.6.
Performance (ADR-0028)
- Deterministic parallel aggregation. Large cold view reads now aggregate across every core (scoped-thread workers, one per disjoint row band, above a cell-count threshold so small reads stay serial). Results are provably bit-identical to the serial path regardless of worker count or scheduling. Measured 4.5x to 6.9x faster on large consolidated views (a 40k-cell all-consolidated crossjoin drops from ~454 ms to ~72 ms on 14 cores). No new dependency.
- Persistent view cache. Repeat reads of an unchanged view are served from a bounded, version-keyed cache (cached-read budget p99 under ~100 ms). The key is lossless over the cube version, view shape, active sandbox, and the caller's exact element-deny set, so it self-invalidates on any write and never returns a stale or cross-user result. Configurable via
EPIPHANY_VIEW_CACHE_ENTRIES(default 256, 0 disables).
Also new since m8.6
- Web UI overhaul (ADR-0020), model editing from the UI and REST (ADR-0021), and an Excel add-in (ADR-0022).
- Shared, independent dimensions (ADR-0024); connector preview and admin dashboards (ADR-0027); in-house web syntax highlighting (ADR-0026); onboarding polish; native Windows service hosting.
- Modular per-object-kind permissions (ADR-0023), fail-closed by default, superseding the earlier object and global cube grant models.
- Tier-2/3 security hardening (ADR-0017 family + ADR-0025): login-timing dummy-hash, parser recursion-depth guards, password-strength policy, session idle-timeout with revoke-on-change, ingestion row caps, validated connector working directory, and a documented at-rest-encryption posture.
See CHANGELOG.md for the full history. Prebuilt single-binary downloads (Linux x86_64/aarch64, Windows x86_64, macOS aarch64) are attached once the release build completes.