Marivo 0.4.6
Marivo 0.4.6 adds a governed path from physical datasource discovery to typed table projections, gives Event analysis exact observed occurrence bounds, and makes readiness output quieter without weakening its blockers. It also improves frame interoperability and warns when a persisted analysis session is reused for a different question.
Highlights
Section titled “Highlights”md.table(..., columns={alias: md.source_column(...)})declares a closed, typed projection over one physical table. Stable aliases flow through inspection, acquisition, semantic materialization, lineage, and preview; declared types are assertions rather than casts.- ClickHouse inspection exposes safe adapter-only physical columns through
projectable_columns, including copyablemd.source_column(...)declarations. Conflicting or unsupported physical types are omitted with structured warnings instead of being guessed. session.events.occurrence_bounds(event_or_model)returns exact, UTC-normalized earliest and latest occurrence times for an Event or the distinct Event triggers of a StateModel. The result is an observed range, deliberately separate from completeness evidence.md.time_range(...)adds a bounded half-open temporal acquisition scope for date or timestamp windows, including projected temporal columns.
Changed
Section titled “Changed”- The authoritative Event watermark read now lives at
session.events.watermark(event, through=...), alongside the other Event-specific operations. Replace the 0.4.5session.observe_watermark(...)call with this namespaced entry. - Readiness now distinguishes
advisoryfrom a truewarning. Missing snapshot and preview evidence remains visible but no longer changes an otherwise clean report fromreadytoready_with_warnings; repeated evidence gaps are grouped by evidence root. MetricFrame.time_dimension_columnsmaps public time-axis columns back to their semantic time-dimension paths, making cross-frame alignment explicit.- Result guidance consistently teaches
.contract().show(), while focused semantic help points to the first registered analysis call and leaves state-specific continuation to the returned artifact contract. md.raw_sql(...)keeps its bounded default at 100 rows; callers can still request a larger explicitlimitfor a narrow diagnostic.
MetricFrame.to_pandas()converts Decimal-valued object columns tofloat64, so ordinary pandas arithmetic no longer fails with mixedfloat/Decimaloperands. The published artifact contract reports the same output type.- Readiness now blocks semi-additive snapshot folds that have no executable
observe path, and only suggests
sample_intervalrepairs for sub-day grains where that declaration is legal. - Multi-metric
observeonly suggests omittingtime_dimensionwhen every root converges on the same implicit axis; otherwise it points to an explicit shared axis. - Reopening a named session with a different non-empty question emits
SessionQuestionMismatchWarningand preserves the original question, avoiding silent cross-question analysis reuse. MetricFrame.coverageis correctly described asCoverageFrame | Nonein live contracts, and stalemarivo.analysis.helpcalls now point to the single top-levelmarivo.help(...)coordinator.
Documentation
Section titled “Documentation”- Expanded the English and Chinese semantic-layer guides with typed table projection, bounded temporal acquisition, physical-column discovery, NULL semantics, and advisory readiness behavior.
- Added Event occurrence-bound guidance and the namespaced watermark entry to the bilingual analysis workflow.
- Removed the obsolete claude-pipe installation path from the public site.
Internal
Section titled “Internal”- Release validation now imports UTC through Marivo’s compatibility layer, so the publishing workflow remains valid on the minimum supported Python 3.10.
Installation
Section titled “Installation”curl -fsSL https://marivo.io/install.sh | bashIn mainland China, use:
curl -fsSL https://marivo.io/install-marivo-cn.sh | bashFor manual installation:
pip install marivoInstall the backend extra for each datasource you plan to use. Marivo 0.4.6 requires Python 3.10 or newer.