Repository navigation
graphsense-lib 2.20.0
[2.20.0] - 2026-10-29
graphsense-cli sync run gains scheduled tasks (e.g. the weekly cross-chain pubkey update), and Delta Lake compaction no longer deletes files a running Spark job still reads. The API version stays 2.19.0 (no OpenAPI change, no new Python client).
Upgrade notes
- Vacuum keeps removed Delta Lake files for 48h (was 0), so storage of compacted-away files is freed two days later.
sync run --onceexits 2 when thesyncsection or the-cnetwork is missing from the config (was 0).
Web API + Python client
Changed
- A non-JSON error answer from the notifications service (e.g. a proxy's HTML error page) is no longer passed to the client; the client gets the status and its reason phrase, and the body is logged.
Library
Added
sync runruns scheduled tasks (sync.tasks): a graphsense-cli command at a time of day (UTC), optionally on one weekday, on one daemon of the task's channel at a time. A missed time is caught up, a failure alerts and is retried everyretry_minutes, and the last run survives restarts.sync statuslists the tasks;sync pause/resume --task <name>. Replaces the cron line of the weekly pubkey update.transformation pubkey-update-all:pubkey-update --skip-detectfor every network with a delta sink (or-n, in that order), thenpubkey-detect,pubkey-compactand, for a delta sink,pubkey-load, as one job.- Tagpack validation names the t1 address behind a ZIP-320 TEX address (
tex1…) in its hint; the chain, and so the tagstore lookup, only has the t1 form.
Changed
sync runwarns once, not every second, when thesyncsection or a-cnetwork is missing from the config; with--onceit then exits 2 instead of 0.- Sync jobs log the config file they run with, instead of "Running version … without a config".
- Compatible with pandas 3.1 (no
inplace=True, deprecated there). Dependency updates: pandas 3.1.0, fastapi 0.162.0, authlib 1.9.1, dnspython 2.9.0 (GHSA-45c3-73f7-pv4m), aiohttp 3.14.4, uv image 0.13.6; Python client: python-dateutil 3.0.0.
Fixed
- Delta Lake compaction no longer deletes files a running Spark job still reads. Vacuum kept no removed files (retention 0), so a transformation or
pubkey-updatethat overlapped a compaction of its source network could fail mid-read on a missing parquet file. Removed files are now kept for 48h; storage of compacted-away files is freed that much later. The time of the last vacuum is stored in the table propertygraphsense.lastVacuum, since a vacuum that deletes nothing leaves no commit to scheduleauto_compacton. - The legacy ingest pipeline (
GRAPHSENSE_LEGACY_INGEST) honoursingest_config.reorg_backoff_blocks; it always used the built-in backoff. --auto-compact-last-n 0is refused likeauto_compact_last_n: 0in the config; it silently fell back to the default.- A stop while taking a Redis lock no longer leaves the lock behind, also in the moment between acquiring it and starting work.
Full Changelog: v2.19.0...v2.20.0