Repository navigation
v2.1.0
Antecedent 2.1.0 release notes
The 2.1 release in one view
2.1 keeps the identify → estimate → inspect → refresh → export → consume lifecycle of 2.0 and widens the questions that lifecycle can carry. Randomized experiments, held-out policy value, longitudinal regimes, difference-in-differences and related designs, and survival contrasts prepare and analyze as retained studies. Interval claims for those studies are rows of a graphless support matrix, separate from the geometric matrix. A row is a support license for that claim. It is not a coverage record; result.calibration is still the per-execution calibration status. Network exposure keeps its geometric Bernoulli cell and adds graphless rows for cluster-randomized, saturation, and observational contrasts. On the structural side, restricted experiments identify a target effect from the experiments a source can actually run, a fixed-DAG natural direct effect shares one abduced world across both treatments, and Bayesian estimation covers attribution, trial transport, network interference, and class-posterior intervention response. Every geometric-matrix route executes from a checked operation sealed at preparation. A result still carries its identification, support, uncertainty, assumptions, provenance, and limits.
Design studies on the same contract
The new families live on stage modules, not the package root: experiment, factorial, policy, regimes, quasi, and survival. Prepare freezes the design with the study. Refresh reuses that frozen design and can take outcome-only data; it does not re-read design columns from the new table. On the experiment, policy, regime, and interference queries, row-aligned inputs may be named by data column, and prepare resolves those names.
Randomized designs cover Bernoulli, complete, stratified, cluster, fixed-cell 2×2 factorial, and independent multi-arm assignment, plus switchback sequences, Wald complier effects, one-sided treatment on the treated, fixed-coefficient CUPED, and ANCOVA on pre-assignment covariates. Policy evaluation scores a precomputed binary or multi-action policy on held-out randomized subjects, including finite-class regret, uplift bins, and a kernel-smoothed group-to-dose policy under a declared known density. Longitudinal regimes evaluate a prespecified static or history-adaptive rule by g-formula, sequential doubly robust scores, or an additive marginal structural model. The caller supplies the conditional rewards or stabilized weights those scores condition on. Quasi-experimental designs cover two-period and repeated-cross-section difference-in-differences, staggered adoption with a never-treated event study, synthetic control and synthetic difference-in-differences (including a donor-trained ridge correction and an exact assignment test of a stated constant effect), fuzzy regression discontinuity, and regression kink. Survival contrasts cover individually randomized RMST and fixed-horizon survival, delayed entry, known censoring weights, and competing risks. Simultaneous curve bands are their own graphless rows.
The graphless support matrix is the support license for these claims. A design can return a point when no row matches. A matching row licenses that claim under its stated support; it does not calibrate the interval. A pointwise row does not confer a simultaneous band. A caller-supplied nuisance, density, or propensity is not independently verified.
Restricted experiments
2.0 transport assumes a source can experiment on the variables the classical theorems name. 2.1 adds z-transport for a target effect identified from one source's experiments on a bounded controllable set: finite discrete diagrams of up to twelve observed variables and four controllables. A positive decision is a checked formula bound only to the joints that formula cites, including a registered surrogate route. A line-11 obstruction is a structural fact about the selection diagram and the declared controllable set: an empty catalog and the full experiment family reach the same terminal, and replay rechecks it. Two sources are searched separately. Complementary factors combine only under two registered factorizations — disconnected outcome components, or one connected graph whose intervened outcomes separate into two groups given the treatments — and a request that would invent a joint over both sources' interventions is refused by name.
The same route reports an assumption range for outcome-kernel contamination, with witnesses and a tipping fraction. That range is not a sampling interval. A planner can test hypothetical catalog additions, rank checked sufficient studies by a caller-supplied cost, and replay the proposal when the evidence actually arrives. The point artifact carries the proof, catalog binding, laws, and program; an independent consumer rechecks them and recomputes the point. Empirical cited tables can publish a nominal percentile bootstrap or a posterior equal-tail interval. Both carry estimator_grid_not_measured. No coverage record attests them, and this cut does not treat them as calibrated. See the transport coverage matrix.
Nested counterfactuals and a wider Bayesian scope
The fixed three-node natural direct effect replays both treatment worlds from one abduced exogenous table. Under a non-separable outcome the frozen mediator carries that unit's disturbance into the direct effect, so the point is the shared-abduction value rather than a disturbance-free plug-in. The effect is point-only, and worlds outside that mediation contract refuse. See the counterfactual coverage matrix.
Bayesian estimation, still model-scoped, now includes anomaly and change attribution on a shared row law, trial-to-target transport, finite-network interference, and CPDAG and PAG intervention response under a graph posterior. Conditional effects take multiple declared modifiers. Response curves can report a simultaneous band from the same joint posterior draws. Finite-discrete structural transport accepts an empirical-support Bayesian bootstrap and a declared-state-space Dirichlet posterior. Sharp regression discontinuity has a bandwidth-conditional local-linear posterior, and a linear instrumental-variables route uses a joint Gaussian structural model. A quadratic g-computation basis and a cross-fitted robust average effect are available as procedures whose intervals do not carry a calibrated coverage claim.
Providers, without rebuilding Antecedent
extensibility.CausalProviderSpec is the contract for an analysis Antecedent does not implement. A Python provider is registered explicitly, or loaded from a separately installed entry point, and analyze returns a ProviderAnalysisResult that keeps the provider's output, uncertainty semantics, and trust boundary. It does not recast plugin output as a native point or interval. Caller-supplied verification fixtures can mark an exact request verified; unseen requests stay externally attested. An EconML handoff still encodes through the existing artifact path. External packages need no Rust or Python rebuild, and a verified provider does not receive a native support-matrix license.
What is deliberately not claimed in 2.1
The support matrix is the license for graph, evidence, inference, and validation coordinates. The graphless matrix is the license for design-family claims. Neither matrix is a calibration pass. An implemented query is not permission to combine every design, horizon, nuisance, and uncertainty statement.
In particular: synthetic control and synthetic difference-in-differences report a point, and their exact assignment p-values test a stated sharp null. They have no effect-interval row. The direct factorial utility reports cell means and covariance-free variance bounds and has no graphless row; the retained factorial randomization is a separate row. Sequential inverse-probability regime values and augmented panel difference-in-differences stay point-only. Caller-fitted censoring or propensity routes stay point-only where no row names them. Coupled capacity or budget constraints keep a policy value point-only. Longer regime horizons do not inherit the two- and three-period rows. Three or more ANCOVA covariates stay point-only. z-transport is sound and incomplete inside its variable bounds. A support license is not a coverage claim. calibrated still requires a coverage record that matches the execution and attests the executing code.
Explicit refusals
Unlisted geometric coordinates and unsupported priors or target populations still refuse. A graphless design that misses its row has no support license for that claim. A point may still be returned. See the support matrix and the graphless support matrix.
Licensed support snapshot
The counts below are the geometric support matrix only. They record which coordinates are licensed and which of those cite a coverage record in the registry — licensing, not the coverage a calibration pass measures. Design-family claims are in the graphless matrix.
472 licensed of 1475 meaningful cells (2089 n/a typed impossibilities are not a coverage gap). 1003 refused with a reason on file; 0 refused without a reason; 0 active allowed_unlicensed compatibility entries.
Interval calibration of the 472 licensed cells: 424 cite coverage records; 44 across 22 distinct coordinates have no coverage measurement for their estimator (estimator_grid_not_measured); 4 report no interval (no_interval_reported). A licensed cell therefore does not imply that its interval coverage was measured, and cited records do not by themselves make a result calibrated (see result.calibration).
AnomalyAttribution×Dag×explicit×Frequentist× validationnoneAnomalyAttribution×Dag×explicit×Bayesian× validationnoneAverageDerivative×Dag×explicit/accepted×Frequentist× validationnoneAverageDerivative×Dag×explicit/accepted×Bayesian× validationnoneAverageEffect×Dag/Admg/Cpdag/Pag×explicit/accepted/graph_posterior×Frequentist× validationnone/cheap/fullAverageEffect×CoDetermined/Unknown×explicit×Frequentist× validationnoneAverageEffect×Dag/Admg/Cpdag/Pag×explicit/accepted/graph_posterior×Bayesian× validationnone/cheap/fullChangeAttribution×Dag×explicit×Frequentist× validationnoneChangeAttribution×Dag×explicit×Bayesian× validationnoneConditionalEffect×Dag/Cpdag/Pag×explicit/accepted/graph_posterior×Frequentist× validationnone/cheap/fullConditionalEffect×Dag/Cpdag/Pag×explicit/accepted/graph_posterior×Bayesian× validationnone/cheap/fullCounterfactual×Dag×explicit/accepted×Frequentist× validationnoneCounterfactual×Dag×explicit/accepted×Bayesian× validationnoneDirectionalDerivative×Dag×explicit/accepted×Frequentist× validationnoneDirectionalDerivative×Dag×explicit/accepted×Bayesian× validationnoneElasticity×Dag×explicit/accepted×Frequentist× validationnoneElasticity×Dag×explicit/accepted×Bayesian× validationnoneInterventionalDistribution×Dag×explicit/accepted×Frequentist× validationnone/cheap/fullInterventionalDistribution×Admg×explicit/accepted×Frequentist× validationnoneInterventionalDistribution×Dag×explicit/accepted×Bayesian× validationnone/cheap/fullInterventionalDistribution×Admg×explicit/accepted×Bayesian× validationnoneInterventionResponse×Dag/Admg×explicit/accepted/graph_posterior×Frequentist× validationnone/cheap/fullInterventionResponse×Cpdag×explicit×Frequentist× validationnoneInterventionResponse×Cpdag×accepted×Frequentist× validationnoneInterventionResponse×Cpdag×graph_posterior×Frequentist× validationnoneInterventionResponse×Cpdag×graph_posterior×Frequentist× validationcheapInterventionResponse×Cpdag×graph_posterior×Frequentist× validationfullInterventionResponse×Pag×explicit×Frequentist× validationnoneInterventionResponse×Pag×accepted×Frequentist× validationnoneInterventionResponse×Pag×graph_posterior×Frequentist× validationnoneInterventionResponse×Pag×graph_posterior×Frequentist× validationcheapInterventionResponse×Pag×graph_posterior×Frequentist× validationfullInterventionResponse×TemporalDag×explicit×Frequentist× validationnoneInterventionResponse×TemporalDag×accepted×Frequentist× validationnoneInterventionResponse×TemporalDag×graph_posterior×Frequentist× validationnoneInterventionResponse×TemporalDag×graph_posterior×Frequentist× validationcheapInterventionResponse×TemporalDag×graph_posterior×Frequentist× validationfullInterventionResponse×TemporalCpdag×explicit×Frequentist× validationnoneInterventionResponse×TemporalCpdag×accepted×Frequentist× validationnoneInterventionResponse×TemporalCpdag×graph_posterior×Frequentist× validationnoneInterventionResponse×TemporalCpdag×graph_posterior×Frequentist× validationcheapInterventionResponse×TemporalCpdag×graph_posterior×Frequentist× validationfullInterventionResponse×TemporalPag×explicit×Frequentist× validationnoneInterventionResponse×TemporalPag×accepted×Frequentist× validationnoneInterventionResponse×TemporalPag×graph_posterior×Frequentist× validationnoneInterventionResponse×TemporalPag×graph_posterior×Frequentist× validationcheapInterventionResponse×TemporalPag×graph_posterior×Frequentist× validationfullInterventionResponse×CoDetermined×explicit×Frequentist× validationnoneInterventionResponse×Dag×explicit/accepted/graph_posterior×Bayesian× validationnoneInterventionResponse×Admg×explicit/accepted/graph_posterior×Bayesian× validationnone/cheap/fullInterventionResponse×Cpdag×explicit×Bayesian× validationnoneInterventionResponse×Cpdag×accepted×Bayesian× validationnoneInterventionResponse×Cpdag×graph_posterior×Bayesian× validationnoneInterventionResponse×Cpdag×graph_posterior×Bayesian× validationcheapInterventionResponse×Cpdag×graph_posterior×Bayesian× validationfullInterventionResponse×Pag×explicit×Bayesian× validationnoneInterventionResponse×Pag×accepted×Bayesian× validationnoneInterventionResponse×Pag×graph_posterior×Bayesian× validationnoneInterventionResponse×Pag×graph_posterior×Bayesian× validationcheapInterventionResponse×Pag×graph_posterior×Bayesian× validationfullInterventionResponse×TemporalDag×explicit×Bayesian× validationnoneInterventionResponse×TemporalDag×accepted×Bayesian× validationnoneInterventionResponse×TemporalDag×graph_posterior×Bayesian× validationnoneInterventionResponse×TemporalDag×graph_posterior×Bayesian× validationcheapInterventionResponse×TemporalDag×graph_posterior×Bayesian× validationfullInterventionResponse×TemporalCpdag×explicit×Bayesian× validationnoneInterventionResponse×TemporalCpdag×accepted×Bayesian× validationnoneInterventionResponse×TemporalCpdag×graph_posterior×Bayesian× validationnoneInterventionResponse×TemporalCpdag×graph_posterior×Bayesian× validationcheapInterventionResponse×TemporalCpdag×graph_posterior×Bayesian× validationfullInterventionResponse×TemporalPag×explicit×Bayesian× validationnoneInterventionResponse×TemporalPag×accepted×Bayesian× validationnoneInterventionResponse×TemporalPag×graph_posterior×Bayesian× validationnoneInterventionResponse×TemporalPag×graph_posterior×Bayesian× validationcheapInterventionResponse×TemporalPag×graph_posterior×Bayesian× validationfullMediationEffect×Dag×explicit/accepted×Frequentist× validationnone/cheap/fullMediationEffect×Dag×explicit/accepted×Bayesian× validationnone/cheap/fullNestedCounterfactualEffect×Dag×explicit×Frequentist× validationnonePathSpecificEffect×Dag×explicit/accepted×Frequentist× validationnone/cheap/fullPathSpecificEffect×Dag×explicit/accepted×Bayesian× validationnone/cheap/fullPointDerivative×Dag×explicit/accepted×Frequentist× validationnonePointDerivative×Dag×explicit/accepted×Bayesian× validationnonePulseEffect×TemporalDag/TemporalCpdag/TemporalPag×explicit/accepted/graph_posterior×Frequentist× validationnone/cheap/fullPulseEffect×TemporalDag/TemporalCpdag/TemporalPag×explicit/accepted/graph_posterior×Bayesian× validationnone/cheap/fullResponseCurve×Dag/Admg/Cpdag/Pag/TemporalDag/TemporalCpdag/TemporalPag×explicit/accepted/graph_posterior×Frequentist× validationnoneResponseCurve×Dag/Admg/Cpdag/Pag/TemporalDag/TemporalCpdag/TemporalPag×explicit/accepted/graph_posterior×Bayesian× validationnoneResponseJacobian×Dag×explicit/accepted×Frequentist× validationnoneResponseJacobian×Dag×explicit/accepted×Bayesian× validationnoneSemiElasticity×Dag×explicit/accepted×Frequentist× validationnoneSemiElasticity×Dag×explicit/accepted×Bayesian× validationnoneSustainedEffect×TemporalDag/TemporalCpdag/TemporalPag×explicit/accepted/graph_posterior×Frequentist× validationnone/cheap/fullSustainedEffect×TemporalDag/TemporalCpdag/TemporalPag×explicit/accepted/graph_posterior×Bayesian× validationnone/cheap/fullTemporalMediationEffect×TemporalDag/TemporalCpdag×explicit/accepted/graph_posterior×Frequentist× validationnone/cheap/fullTemporalMediationEffect×TemporalDag/TemporalCpdag×explicit/accepted/graph_posterior×Bayesian× validationnone/cheap/fullTransportQuery×Admg×explicit×Frequentist× validationnoneTransportQuery×Admg×explicit×Bayesian× validationnoneInterferenceQuery×Dag×explicit×Frequentist× validationnoneInterferenceQuery×Dag×explicit×Bayesian× validationnone
What's Changed
- Antecedent 2.1.0: design-family studies, z-transport, and wider Bayesian scope by @nulldiver in #54
Full Changelog: v2.0.0...v2.1.0