Marivo 0.3.2
Marivo 0.3.2 is an atomic breaking cutover of the analysis surface. The
help system, artifact contract, error model, boundary model, packaged skill,
and CLI route all change together. Removed surfaces have no aliases, redirects,
deprecated fields, dual-read paths, or compatibility flags. The additive
frame.id == frame.ref identity alias does not restore a removed API.
Highlights
Section titled “Highlights”- A closed capability kernel replaces the old topic-based help surface. Every
public operator, constructor, read, recovery, and boundary crossing is
registered with a stable
capability_id,accepted_inputs, andoutput_family. The CLI routemarivo help analysis [target](orpython -m marivo help analysis [target]) prints a fingerprinted capability index;mv.help()andmv.help(target)provide the same surface from Python. A runtime family gate validates submitted inputs against the registry’saccepted_inputsbefore any backend work begins. ArtifactAffordance.operatoris replaced bycapability_id,public_entrypoint,help_target, andexpected_output_family. Each affordance is a mechanical compatibility gate derived from the capability registry, not a recommendation.ArtifactContractnow carriesboundary_ports: typedArtifactBoundaryPortobjects describing terminal-exit ports (e.g.boundary.to_pandas) withpreservesanddoes_not_preserveguarantees.- Tier-1
meanmetrics now persist exactsum(measure)andcount_non_null(measure)components during observe, enabling direct weighted-mix attribution without changing the semantic model. - Attribution now computes exact one-sided contributions for new and churned
component segments and fails closed unless every deepest partition
reconciles to its independently computed total delta.
AttributionFrame.show()renders total, one-sided, unattributed, and residual reconciliation facts. - Analysis inspection is more uniform: live sessions implement bounded
render()/show(), every frame and frame summary exposes.idas a read-only alias of.ref, catalog help labels collections as properties, andmv.help("AttributionMode")distinguishes multi-axis row layout from attribution math. - Artifact help now teaches progressive reads in a stable order:
show()for bounded state,contract()for mechanical compatibility, thento_pandas()only when the remaining work is intentionally custom and terminal. DeltaFrame.show()now exposes the persisted attribution gate, and grouping help topics render asmv.help("...")with their real members instead of advertising nonexistentsession.recoveryorsession.artifactsnamespaces.- The generic
AnalysisError.detailsbag is replaced by stable typed fields:expected,received,location, andrepair. Therepairfield is a typedAnalysisRepairobject withkind,action,help_target, optionalsnippet, and optionalcandidatesdrawn from live state. BaseFrame.describe()andBaseFrame.plot()are removed. Accessing them raisesAttributeError. Useframe.show()for bounded inspection andframe.to_pandas()for terminal custom analysis.- The
marivo-analysisskill is now a one-file boundary kernel. It owns hard boundaries, handoffs, evidence continuity, and closeout obligations. It does not duplicate API signatures, operator inventory, call examples, ordered process, methodology checklists, or report templates. Thereferences/attachment tree is deleted. session.observe(...)is the sole canonicalMetricFrameproducer.derive_metric_frame,escape_hatch, and all promotion paths (promote_metric_frame,promote_delta_frame,promote_attribution_frame,from_pandas,explore_ibis) are removed. Arbitrary Ibis, pandas, or SQL data can no longer be upgraded into canonical analysis artifacts.md.raw_sql(...)is the sole terminal raw SQL execution path. It composesauthoring_timeoutwith a read-only transaction, detects exact row truncation, and exposesRawSqlResult.to_pandas()for terminal pandas export. Terminal results cannot re-enter typed analysis.mv.session.recent(...)andmv.session.inspect(name)provide bounded, newest-first historical-session reference without resuming or touching the inspected session. Semantic gaps now stop only the affected typed branch; terminal raw SQL may continue with disclosed temporary inferred semantics, while durable semantic authoring remains closeout-approval gated.
Breaking changes
Section titled “Breaking changes”- Evidence Engine Cutover A. The former
finding -> proposition -> assessmentjudgment runtime is replaced by deterministic typed findings and one boundedArtifactDigestper artifact.session.knowledge(), proposition/assessment reads, persisted follow-ups, open items, next steps, and their public types are removed without aliases. Marivo no longer emits generic validation/confidence labels or session-level judgments; the agent owns cross-artifact synthesis and planning. - One artifact evidence path. Use
artifact.evidence_status,artifact.evidence_digest, andartifact.show().evidence_summary,blocking_issues,ConfidenceScope, and the artifact issue shortcut are removed.contract().issuescontains the closedArtifactIssueunion, andAnalysisScoperetains the existing metric-shaped scope. - Direct bounded audit reads.
session.evidence.digests(...),.findings(...),.digest(ref),.finding(id), and.trace(id)replace the judgment API. List reads return immutable keyset pages. Evidence-store unavailability raisesEvidenceStoreUnavailableError; it is never reported as an empty page. - Typed candidate selection.
CandidateSet.select(rank=1)now returns a closed shape-specific selection. The arbitraryattribute=read and candidate affordance/constraint payloads are removed. - Role-preserving affordances. Flattened
required_inputsandArtifactParamTemplateare replaced by exact parameter requirements with accepted families and current-artifact bindability. Invocation-option enumeration is intentionally not part of this cutover. - Removed help topics.
mv.help('workflow')andmv.help('advanced')no longer resolve. The new help system usesmv.help()(root index),mv.help(target)(focused capability), andmv.help(ClassName)(type help). String aliases for help targets are removed; use canonical registered targets from the live surface. ArtifactAffordance.operatorremoved. Replaced bycapability_id,public_entrypoint,help_target, andexpected_output_family.AnalysisError.detailsremoved. Replaced by stable typed fields (expected,received,location,repair) with typedAnalysisRepairobjects. There is no generic details bag.ArtifactContract.boundary_portsadded. Typed terminal-exit boundary ports derived from the capability registry.pct_contributionremoved. Attribution rows now exposeshare_of_total_delta,share_of_positive_pool, andshare_of_negative_pool, so signed net shares and same-sign pool shares no longer share an implicit or incomplete denominator.BaseFrame.describe()andBaseFrame.plot()removed. IntentionalAttributeError. Useframe.show()andframe.to_pandas().marivo-analysisskill reduced to one file. Thereferences/tree is deleted. The skill is a boundary protocol, not a manual.- New CLI route and fingerprint.
marivo help analysis [target]prints the Marivo version, resolved Python executable, and package path as an environment fingerprint. A baremarivoresolved fromPATHis not authoritative unless its fingerprint matches the analysis interpreter. - Runtime family gate. Submitted inputs are validated against the
registry’s
accepted_inputsbefore backend work. Mismatches fail closed with a structuredAnalysisError. derive_metric_frameand promotion paths removed.Session.derive_metric_frame(...),escape_hatch.explore_ibis(...),escape_hatch.from_pandas(...),escape_hatch.promote_metric_frame(...),escape_hatch.promote_delta_frame(...),escape_hatch.promote_attribution_frame(...),IbisQuerySpec,MetricColumns,ibis_query,metric_columns,time_column,dimension_column,PromotionPolicy,PromotionSemanticAnchors,PromotionFailedError, andExplorationResultare removed.session.observe(...)is the sole canonicalMetricFrameproducer.md.raw_sql(...)is the sole terminal raw SQL path. It enforcesauthoring_timeoutcomposed with a read-only transaction, detects exact row truncation, and returnsRawSqlResultwithtimeout_seconds,duration_ms,truncated, andto_pandas(). Terminal results cannot re-enter typed analysis.
No compatibility or migration behavior
Section titled “No compatibility or migration behavior”This is an atomic cutover. Removed symbols, topics, and fields have no
compatibility aliases, redirects, deprecated fields, dual-read paths,
compatibility flags, or automatic migration. Code that references them must be
updated to the new surface. The additive frame.id == frame.ref alias is only
an identity-access convenience and does not change persisted metadata.
Analysis evidence stores are included in this rule. A non-current judgment.db and
a frame sidecar containing removed evidence fields are rejected; recreate the
analysis session to produce canonical typed findings and digests.
Semantic and datasource live surface
Section titled “Semantic and datasource live surface”0.3.2 also folds the datasource/semantic live-surface cutover into this same
atomic release. The installed package is now the single authority for
datasource and semantic authoring facts, observable state, mechanically
available calls, effects, and typed repair. The packaged marivo-semantic
skill is reduced to a one-file boundary kernel that owns routing discipline,
hard boundaries and closeout obligations; it no longer duplicates
API signatures, operator inventory, call examples, or repair catalogs.
- Direct semantic readiness for analysis.
ReadinessReport.analysis_ready_refslists the requested refs that passed scoped certification. Blockers and warnings remain on the same report; callers handle them explicitly before using those refs through the ordinary analysis APIs. No intermediate transfer object or receipt is required. - Native datasource and semantic CLI help.
marivo help semantic(andpython -m marivo help semantic) is the default integrated authoring entry;marivo help datasourceowns the physical stage. Both are backed by the same resolver and renderer asmd.help(...)/ms.help(...).marivo --helppoints to these entries and tomarivo help analysis; it no longer teachespython -csnippets. - Environment fingerprint on track help. Track root help
(
marivo help datasource,marivo help semantic,marivo help analysis) prints the Marivo version, resolved Python executable, and package path, so an agent can verify that help and execution share one interpreter before trusting any authoring guidance. The baremarivo --helppoints to these tracks but does not itself print the interpreter fingerprint. - Typed repair. Free-form recovery strings on mechanically actionable
readiness/preview results and datasource/semantic errors are replaced by
typed
AuthoringRepairobjects (kind,help_target,action, optionalsnippet, optionalcandidates,preserves_evidence). The advisorysuggested_actionon richness gaps is retained under its own advisory rule and is not consumed as a repair or transition. - Object-near
.contract()on state-bearing results. The.contract()convention applies to state-bearing results likeCatalogObject,VerifyResult, andReadinessReport, exposing mechanically valid next actions (e.g.VerifyResult.contract()may expose preview, whileReadinessReportexposes certified refs directly throughanalysis_ready_refs). Contracts carry namespaced live help targets and complete orthogonal effect metadata (data access, connection, mutation, guards).
Removed
Section titled “Removed”- Duplicate top-level verification/readiness wrappers.
ms.verify_object(...)andms.readiness(...)are removed from the top-levelmssurface;SemanticCatalog.verify_object(...),SemanticCatalog.preview(...), andSemanticCatalog.readiness(...)are the sole public receivers. - Prepare-era
AuthoringQuestion. The publicAuthoringQuestionexport, itsoptions/default_optioncontract, and the unused question-bearing assessment path are removed. No replacement question DTO is added; an unresolved business decision is a skill-owned one-question stop, not a runtimeuser_decisionrepair. - Free-form mechanical recovery strings.
next_callson datasource evidence/inspection results andsuggested_actionas a mechanically actionable readiness/preview field are removed. They are replaced by typed contracts andAuthoringRepair. (Advisory richness retains its ownsuggested_action.) - Packaged skill attachments/examples as runtime documentation
dependencies. The
references/attachment tree and example runners are deleted. No active code, constraint, error, or latest doc links to deleted skill attachments. The installed runtime is self-explanatory from its public Python and CLI surfaces.
No compatibility or migration behavior (semantic cutover)
Section titled “No compatibility or migration behavior (semantic cutover)”The semantic/datasource cutover is target-only. There are no compatibility aliases, no dual help path, no transition-string bridge, no skill-document fallback, and no migration workflow. Historical versioned documentation and release notes are unchanged. Code that references removed symbols, wrappers, or fields must be updated to the new live surface.
Documentation
Section titled “Documentation”- Updated the analysis-workflow, first-analysis, and evidence docs in English
and Chinese to route entry through the project interpreter and fingerprint,
explain capability discovery, object-near help, static type algebra, artifact
show/contract, structured errors, terminal boundary exits, and semantic-authoring repair. - Updated
agent-guide.mdand active analysis specs with the new ownership model: environment-verified live surfaces own capabilities and runtime guidance; the skill owns hard boundaries, routing, evidence continuity, and closeout obligations; the agent owns planning and judgment. - Marked both 2026-07-13 design specs as
approved; implementation planned.
Installation
Section titled “Installation”pip install marivoInstall the backend extra for the datasource you plan to use:
pip install "marivo[duckdb]"pip install "marivo[mysql]"pip install "marivo[trino]"pip install "marivo[postgres]"pip install "marivo[clickhouse]"pip install "marivo[all]"Marivo 0.3.2 requires Python 3.12 or newer.