v0.12.0 is a large feature release. Catalogs: per-event metadata is now editable directly in the catalog browser (type-aware editors, multi-row bulk edit, searchable and persisted column visibility, "+ Attribute"), events can be dragged between catalogs (link by default, Shift to move, Ctrl to duplicate), catalogs can be dragged within the browser or onto a plot panel to become an overlay, tscat orphan events are surfaced as a virtual row with a cleanup dialog, and a typed
CatalogProvider.attribute_spec API lets providers publish per-attribute schemas. New parameterized data products ("knobs"): virtual-product callbacks and Speasy templated parameters expose runtime-tunable arguments (
IntKnob,
FloatKnob,
BoolKnob,
ChoiceKnob,
StringKnob, plus widget-bound
TimeRangeKnob,
ThresholdKnob,
DatetimeKnob) edited from an Inspector "Parameters" section. New annotation-layer system: a registered callable returns
Marker /
Span /
HLine annotations drawn on a plot, via the
@register_layer decorator, the
%%layer cell magic,
panel.layer(...), or drag-and-drop from the product tree. New plot API: a
Histogram2D plottable with
panel.histogram2d(...), an
Overlay wrapper for in-canvas text, and a
dsp facade wrapping 13 signal-processing primitives (
filtfilt,
sosfiltfilt,
fir_filter,
iir_sos,
interpolate_nan,
rolling_mean,
rolling_std,
resample,
fft,
spectrogram,
reduce,
reduce_axes,
split_segments) with
SpeasyVariable round-trip semantics. Every graph now carries a
GraphContext envelope enabling "Copy Python code" reproducer snippets, hover tooltips and Inspector context rows; snippet generation moved to Jinja2 templates using a
//-joined product-path convention. Speasy integration: SSC products publish a runtime coordinate-system choice — the release notes summarize it as GSE/GSM/SM/GEI/GEO/MAG, while the code-verified choice list is GSE, GSM, SM, GEO, GM, GEI_TOD and GEI_J_2000 (
SciQLop/plugins/speasy_provider/speasy_provider.py:356–358), i.e. no
MAG entry and an additional
GM — and each Speasy config section is surfaced in SciQLop's Settings UI so it drives Speasy's runtime configuration directly. Also: a runtime tracer with Chrome/Perfetto capture under Tools › Profiling, version-aware App Store filtering, provider-driven aggregated
PlotHints with ISTP fallbacks, a faster-painting startup splash, a per-panel crosshair toggle, palette-aware styling arguments on the graphic primitives, and a rewritten bundled tutorial suite. Fixes include offline startup no longer aborting when the workspace dependency sync cannot reach the network, two SIGSEGV plot/panel teardown crash classes (Qt lifetime rules now documented in
docs/qt-lifetime-patterns.md), macOS window geometry and toolbar-icon sizing, Python 3.14 lazy-annotation introspection, and Windows packaging (paths containing spaces, HiDPI manifest,
SCIQLOP_DIST_DIR). Dependencies moved to PySide6/shiboken6 6.11.0, PySide6-QtAds 4.5.0.3 and SciQLopPlots 0.24.0.