Skip to content

v0.23.4

ALMa v0.23.4

This release makes Health a fast, truthful control surface for provider quota and network access, and fixes a Discovery refresh failure that could leave the production SQLite writer locked.

Added

  • Health reads durable snapshots instead of rebuilding diagnostics on every request. Startup, periodic, mutation-triggered, and terminal-job refreshes keep the snapshots current while the page remains a fast read.

  • OpenAlex work is priced before it runs. Health and import review show the expected credit cost, plans that exceed the remaining allowance are disabled, and automatic work is refused when it would consume the reserved user budget.

  • One network control applies to centralized outbound transports. The stored switch and ALMA_DISABLE_NETWORK are reflected consistently in Settings, Health, and the application shell. When OpenAlex is unavailable, Find & Add and author focus keep their viable local/alternative paths.

Fixed

  • Discovery no longer escapes the centralized SQLite writer path. Scoring cache fills and candidate materialization now use short write_section transactions. Previously, an incidental cache upsert opened an implicit transaction on the refresh connection and retained SQLite's write lock while the process writer gate remained free. Correctly gated writes then queued and timed out against the refresh itself.

  • Concurrent lens refreshes no longer multiply the full local workload. A refresh already owns four retrieval lanes plus a preference-profile worker; lens refreshes now queue behind one local-work slot so a 30-second lane deadline measures that lane rather than CPU and database-read oversubscription.

  • An abandoned retrieval lane stays abandoned. A running Python future cannot be cancelled. If it finishes after the parent deadline, its late result is ignored instead of overwriting the Activity subtask from failed to completed.

Operations

  • The production incident that exposed the Discovery defect held the writer for more than sixteen minutes and blocked extension saves, impressions, and lens review writes. Restarting released the orphaned transaction; this release prevents the same path from recreating it.