Easier to Use, Extend, and Test
Osprey spent its first release cycle proving it can carry trust and safety operations at scale, processing more than 50 million events a day in production at organizations like Bluesky and Discord as it encodes platform-specific rules and supports live investigations. With 1.1.0, we've turned our attention to how we could improve working in Osprey day to day.
Read more about the release on our blog.
Changes
Added
- Postgres execution result store backend (#171 by @serendipty01)
- MinIO execution-result backend wired to the UI API (#332 by @julietshen)
- Persistent sidebar navigation (#240 by @haileyok)
- Dark mode (#246 by @haileyok)
- Dark mode follows system preferences (#360 by @BinaryFiddler)
- Features Registry page at
/features(#276 by @haileyok) - Rules Registry page at
/rules(#277 by @haileyok) GetActionId()stdlib UDF for retrieving the current action ID from execution context (#327 by @julietshen)ParseIntUDF for converting numeric strings to integers (#190 by @bealsbe)StringSliceUDF for extracting substrings by index range (#189 by @bealsbe)ExperimentandExperimentWhenUDFs for checking experiment membership (#203 by @bealsbe)- Per-action health metrics in the executor (#191 by @cmttt)
- Option to suppress cached errors to reduce metric bloat (#180 by @lithium-powered)
- Experimental asyncio-native worker with metrics and engine/coordinator improvements (#341 by @cmttt)
- ATProto JetStream example plugins and rules (#236 by @haileyok)
osprey-stressCLI: closed-loop stress harness that produces synthetic events at a configurable rate, observes theirExecutionResults on the output topic, and reports drop rate and p50/p95/p99 latency, exiting non-zero on threshold breach so it can gate CI on pipeline health (#367 by @julietshen, closes #324)
Changed
- Event stream defaults to selecting all event types on first load (#194 by @chimosky)
- Event stream shows sensible defaults so first-load isn't empty (#297 by @haileyok)
- Replace
react-scriptswithrsbuild/rspackfor UI builds (#235 by @chimosky) - Migrate from npm to pnpm via Corepack (#252 by @haileyok)
- Replace
highcharts(proprietary) withecharts(Apache 2.0) in the Timeseries chart (#374)
Fixed
- Escape literal braces when parsing f-strings in the engine (#347 by @haileyok)
- Tolerate malformed URI escapes in
EntityWithPopoverUI component (#377 by @julietshen) - Add retention limits to Kafka topics to prevent unbounded disk growth (#249 by @VINODvoid)
- Fix failed UDF query (#233 by @chimosky)
- Force a visible scrollbar on the event-stream virtualized list, which was relying on the OS auto-hide default and was easy to miss (#367 by @julietshen)
New Contributors
- @serendipty01 made their first contribution in #171
- @regiscamimura made their first contribution in #172
- @lithium-powered made their first contribution in #180
- @dependabot[bot] made their first contribution in #176
- @bealsbe made their first contribution in #189
- @chimosky made their first contribution in #194
- @VINODvoid made their first contribution in #247
- @taobojlen made their first contribution in #350
- @reitblatt made their first contribution in #370
- @SemTiOne made their first contribution in #385
- @vedarolap made their first contribution in #424
Full Changelog: 1.0.1...1.1.0