consequa-x 2.0.0__tar.gz → 2.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {consequa_x-2.0.0 → consequa_x-2.1.0}/CHANGELOG.md +55 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/PKG-INFO +45 -3
- consequa_x-2.0.0/src/consequa_x.egg-info/PKG-INFO → consequa_x-2.1.0/README.md +242 -235
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/application-integration.md +49 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/design-2.0.md +2 -2
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/framework-integration.md +100 -13
- consequa_x-2.1.0/docs/opentelemetry.md +119 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/product-roadmap.md +44 -27
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/quickstart.md +11 -2
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/release-notes.md +30 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/stable-api.md +13 -1
- {consequa_x-2.0.0 → consequa_x-2.1.0}/pyproject.toml +6 -1
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/build_public_docs.py +3 -3
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/check_installed_release.py +108 -1
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/export_render_site.py +1 -1
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/__init__.py +4 -3
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/capture.py +23 -10
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/cli.py +117 -25
- consequa_x-2.1.0/src/consequa_x/composite.py +335 -0
- consequa_x-2.1.0/src/consequa_x/integrations/__init__.py +166 -0
- consequa_x-2.1.0/src/consequa_x/integrations/claude_agent_sdk.py +93 -0
- consequa_x-2.1.0/src/consequa_x/integrations/langchain.py +82 -0
- consequa_x-2.1.0/src/consequa_x/integrations/openai_agents.py +101 -0
- consequa_x-2.1.0/src/consequa_x/otel.py +621 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/readback.py +12 -8
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/report.py +45 -4
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/verification.py +53 -18
- consequa_x-2.0.0/README.md → consequa_x-2.1.0/src/consequa_x.egg-info/PKG-INFO +277 -208
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x.egg-info/SOURCES.txt +10 -0
- consequa_x-2.1.0/src/consequa_x.egg-info/requires.txt +18 -0
- consequa_x-2.1.0/tests/test_composite.py +331 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_installed_release_check.py +7 -0
- consequa_x-2.1.0/tests/test_integrations.py +339 -0
- consequa_x-2.1.0/tests/test_otel.py +235 -0
- consequa_x-2.0.0/src/consequa_x.egg-info/requires.txt +0 -6
- {consequa_x-2.0.0 → consequa_x-2.1.0}/CONTRIBUTING.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/LICENSE +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/MANIFEST.in +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/SECURITY.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/attribution-calibration.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/build-contract.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/car-reproduction-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/completion-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/decision-contrastive.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/decision-replay.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/decision-shapley.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/design.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/graph-witnesses.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/interaction-sampling.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/interval-followup-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/launch-readiness.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/local-pypi-setup.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/matched-trace-judge.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/migrating-to-2.0.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/offline-reports.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/policy-evaluation.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/policy-replay.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/refund-interactions.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/release-readiness.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/research-roadmap.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/studies/matched-local-2026-10-18.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/studies/refund-family-candidates-v1.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/study-manifests.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/study-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/tau-benchmark-validation.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/upstream-car-comparison.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/v1.1-release.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/docs/variable-length-game-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/examples/agent_loop_sqlite.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/examples/artifact_delivery.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/examples/decision_shapley_fixture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/examples/report_quickstart.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/requirements-dev.lock +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/analyze_matched_local_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/audit_interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/audit_interval_comparison.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/audit_refund_interactions.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/audit_release_artifacts.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/audit_review_revision.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/build_matched_study_figures.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/build_site_demo.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/configure_pypi_auth.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/draw_paper_diagrams.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/finalize_interval_artifacts.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/finalize_matched_local_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/finalize_refund_artifacts.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/plot_interval_comparison.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/plot_paper_results.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/publish_alpha.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/publish_release.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/refresh_sample_report.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/run_interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/run_matched_local_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/run_matched_trace_judge.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/run_tau_benchmark_validation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/run_upstream_car_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/summarize_interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/scripts/summarize_matched_execution.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/setup.cfg +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/__main__.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/adapters/__init__.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/adapters/ollama.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/attribution.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/__init__.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/assessment_metrics.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/calibration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/calibration_export.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/calibration_mechanisms.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/decision_coalition.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/decision_contrastive.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/decision_replay.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/decision_shapley.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/evaluation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/interaction_export.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/interaction_mechanisms.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/interval_comparison.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/intervals.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/payments.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/policy_experiment.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/policy_runner.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/runner.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/targets.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/benchmark/templates.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/compare.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/errors.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/explanation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/graph.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/guard.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/mcp_capture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/migrate.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/models.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/policies.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/py.typed +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/record_verifier.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/research.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/schema.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/schemas/trace-v1.0.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/store.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x/summary.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x.egg-info/dependency_links.txt +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x.egg-info/entry_points.txt +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/src/consequa_x.egg-info/top_level.txt +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/fixtures/v0.1/README.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/fixtures/v0.1/record-timeout-after-commit.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/fixtures/v0.1/refund-another-actor.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/fixtures/v0.1/refund-stale-readback.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/fixtures/v0.1/refund-timeout-after-commit.explanation.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/fixtures/v0.1/refund-timeout-after-commit.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_agent_loop_example.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_assessment_metrics.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_async_capture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_attribution.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_calibration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_calibration_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_calibration_mechanisms.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_capture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_compare_verify_redact.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_decision_coalition.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_decision_contrastive.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_decision_contrastive_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_decision_replay.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_decision_shapley.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_decision_shapley_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_docs_examples.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_errors.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_graph.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_graph_identity.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_interaction_sampling_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_interaction_workers.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_interval_comparison.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_interval_replay.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_intervals.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_matched_baseline_audit.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_matched_execution_summary.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_matched_figure_builder.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_matched_local_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_matched_study_finalizer.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_matched_trace_judge.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_mcp_capture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_migrate.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_model_eval_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_models.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_multi_action.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_ollama.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_payments.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_policies.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_policy_evaluation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_policy_experiment.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_policy_experiment_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_policy_runner.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_prompt_profile_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_public_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_readback_guard.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_record_verifier.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_refund_interactions.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_refund_interactions_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_release_helpers.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_release_inventory.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_render_site_export.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_replay_targets.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_report.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_report_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_research_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_schema.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_site_demo.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_snapshot_integrity.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_stable_release.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_summary_store.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_task_templates.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_tau_benchmark_validation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_upstream_car_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.0}/tests/test_verification.py +0 -0
|
@@ -1,10 +1,65 @@
|
|
|
1
1
|
# Changes
|
|
2
2
|
|
|
3
|
+
## 2.1.0 - 19 October 2026
|
|
4
|
+
|
|
5
|
+
Additive: the roadmap features left out of 2.0.0 (verifier composition,
|
|
6
|
+
framework integrations and OpenTelemetry). Schema `1.0` and the 2.0 API are
|
|
7
|
+
unchanged, and the core still has no required runtime dependency. Checked
|
|
8
|
+
before publication; see the
|
|
9
|
+
[release record](output/release-2.1.0-2026-10-19/README.md).
|
|
10
|
+
|
|
11
|
+
- Verifier composition. `all_of(contract_id, *parts)` and `any_of(...)` build
|
|
12
|
+
one outcome contract from part contracts, each with its own predicate,
|
|
13
|
+
expected values and timing; `contract_parts` decodes and checks them.
|
|
14
|
+
`CompositeVerifier({part_id: verifier}, sources={part_id: source})` checks
|
|
15
|
+
each part against the readback from its source and combines the receipts
|
|
16
|
+
with three-valued logic: `all_of` is violated when any part is violated and
|
|
17
|
+
satisfied when all are; `any_of` is satisfied when any part is and violated
|
|
18
|
+
when all are; otherwise the outcome stays `unknown`. A part without readback
|
|
19
|
+
is `unknown`. The receipt keeps each part's evidence (tagged with its part
|
|
20
|
+
ID, status, origin and reason), the union of the parts' effects and
|
|
21
|
+
findings, and adds `PART_VIOLATED`, `PART_UNKNOWN` and `PART_OTHER_ACTOR`.
|
|
22
|
+
Target matching is conservative, so an agent's report is judged only when
|
|
23
|
+
the deciding parts did target matching. Parts can nest.
|
|
24
|
+
- Several readbacks per verification: `verify`, `averify`,
|
|
25
|
+
`ActionCapture.verify`/`averify` and `poll_readback` (whose `read` may return
|
|
26
|
+
one observation per source) accept a sequence of observations for a verifier
|
|
27
|
+
that provides `verify_readbacks`. Receipts are still checked against every
|
|
28
|
+
supplied observation.
|
|
29
|
+
- Reports describe an `all_of`/`any_of` contract's structure (part count,
|
|
30
|
+
each part's deadline and horizon) and list each recorded part result, without
|
|
31
|
+
showing part payloads.
|
|
32
|
+
- `consequa-x verify` takes `--readback` once per source, plus
|
|
33
|
+
`--part-source PART=SOURCE` and `--scope-field PART=FIELD` for composite
|
|
34
|
+
contracts.
|
|
35
|
+
- OpenTelemetry (`consequa_x.otel`): `to_otlp` writes an OTLP/JSON document
|
|
36
|
+
with a span per action, an `execute_tool` span per attempt named as the GenAI
|
|
37
|
+
semantic conventions describe, and a span per verification, with
|
|
38
|
+
`consequa_x.*` attributes for state, origin, alignment and diagnosis codes.
|
|
39
|
+
Payloads are opt-in (`include_payloads=True`, which also embeds the complete
|
|
40
|
+
trace for `from_otlp`). `emit` creates the spans through `opentelemetry-api`
|
|
41
|
+
(extra `otel`). `record_tool_spans` turns `execute_tool` spans from any
|
|
42
|
+
GenAI instrumentation into recorded actions for the contracts the
|
|
43
|
+
application supplies. New commands: `otel-export` and `otel-import`.
|
|
44
|
+
- Framework integrations (`consequa_x.integrations`): `ToolCallCapture` and
|
|
45
|
+
`ToolCall` record framework tool calls for the calls `contract_for` makes
|
|
46
|
+
consequential, grouping retries through `action_id_for`. Optional extras:
|
|
47
|
+
`openai-agents` (`consequential_tool`, in place of `function_tool`),
|
|
48
|
+
`langchain` (`ConsequaCallbackHandler`) and `claude-agent-sdk`
|
|
49
|
+
(`consequa_hooks` for `PreToolUse`, `PostToolUse` and
|
|
50
|
+
`PostToolUseFailure`). Tested offline with openai-agents 0.24.0,
|
|
51
|
+
langchain-core 1.6.12, claude-agent-sdk 0.2.168 and opentelemetry 1.45.1; no
|
|
52
|
+
live model was called.
|
|
53
|
+
|
|
3
54
|
## 2.0.0 - 19 October 2026 (breaking)
|
|
4
55
|
|
|
5
56
|
See [the 2.0 design](docs/design-2.0.md) and the
|
|
6
57
|
[migration guide](docs/migrating-to-2.0.md). Deferred to 2.1: verifier
|
|
7
58
|
composition, optional framework integrations and OpenTelemetry export.
|
|
59
|
+
Published to PyPI with registry hashes verified; see the
|
|
60
|
+
[release record](output/release-2.0.0-2026-10-19/README.md). Installed checks
|
|
61
|
+
passed on Windows Python 3.11.9 and 3.12.10, on one Alpine Linux 3.24.2 QEMU guest
|
|
62
|
+
with Python 3.14.8 and from a fresh PyPI install. macOS has never been tested.
|
|
8
63
|
|
|
9
64
|
- Typed exceptions: every intentional error derives from `ConsequaError` and
|
|
10
65
|
still from `ValueError` or `TypeError`. `ValidationError` (invalid records,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: consequa-x
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: Evidence-aware explanation of consequential agent actions
|
|
5
5
|
Author: Devrajsinh Jhala
|
|
6
6
|
License-Expression: MIT
|
|
@@ -18,11 +18,19 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
18
18
|
Requires-Python: >=3.11
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE
|
|
21
|
+
Provides-Extra: claude-agent-sdk
|
|
22
|
+
Requires-Dist: claude-agent-sdk>=0.2.168; extra == "claude-agent-sdk"
|
|
21
23
|
Provides-Extra: dev
|
|
22
24
|
Requires-Dist: pytest>=8; extra == "dev"
|
|
23
25
|
Requires-Dist: build>=1.2; extra == "dev"
|
|
24
26
|
Requires-Dist: ruff>=0.8; extra == "dev"
|
|
25
27
|
Requires-Dist: jsonschema>=4.23; extra == "dev"
|
|
28
|
+
Provides-Extra: langchain
|
|
29
|
+
Requires-Dist: langchain-core>=1.6; extra == "langchain"
|
|
30
|
+
Provides-Extra: openai-agents
|
|
31
|
+
Requires-Dist: openai-agents>=0.24; extra == "openai-agents"
|
|
32
|
+
Provides-Extra: otel
|
|
33
|
+
Requires-Dist: opentelemetry-api>=1.45; extra == "otel"
|
|
26
34
|
Dynamic: license-file
|
|
27
35
|
|
|
28
36
|
# Consequa-X
|
|
@@ -53,7 +61,9 @@ python -m pip install consequa-x
|
|
|
53
61
|
consequa-x --version
|
|
54
62
|
```
|
|
55
63
|
|
|
56
|
-
Use `python -m consequa_x` wherever a command below uses `consequa-x`.
|
|
64
|
+
Use `python -m consequa_x` wherever a command below uses `consequa-x`. Optional
|
|
65
|
+
extras add framework integrations and OpenTelemetry: `consequa-x[openai-agents]`,
|
|
66
|
+
`consequa-x[langchain]`, `consequa-x[claude-agent-sdk]` and `consequa-x[otel]`.
|
|
57
67
|
|
|
58
68
|
## See it in a minute
|
|
59
69
|
|
|
@@ -165,6 +175,37 @@ describes the boundary in detail. The
|
|
|
165
175
|
[stable API](https://github.com/Devrajsinh-Jhala/consequa-x/blob/main/docs/stable-api.md)
|
|
166
176
|
page lists what version 2 guarantees.
|
|
167
177
|
|
|
178
|
+
An outcome with several required effects (a refund *and* a closed ticket, or a
|
|
179
|
+
refund *or* store credit) is one contract: `all_of(...)` or `any_of(...)` over
|
|
180
|
+
part contracts, checked by `CompositeVerifier` with one readback per source.
|
|
181
|
+
Unknown parts keep the whole outcome unknown unless another part already
|
|
182
|
+
settles it.
|
|
183
|
+
|
|
184
|
+
## Agent frameworks and OpenTelemetry
|
|
185
|
+
|
|
186
|
+
Optional integrations record an agent framework's tool calls through the same
|
|
187
|
+
recorder. Your `contract_for(call)` decides which calls are consequential:
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
from consequa_x.integrations import ToolCallCapture
|
|
191
|
+
calls = ToolCallCapture(rec, contract_for=contract_for)
|
|
192
|
+
|
|
193
|
+
# OpenAI Agents SDK: use in place of @function_tool
|
|
194
|
+
from consequa_x.integrations.openai_agents import consequential_tool
|
|
195
|
+
# LangChain: config={"callbacks": [ConsequaCallbackHandler(calls)]}
|
|
196
|
+
from consequa_x.integrations.langchain import ConsequaCallbackHandler
|
|
197
|
+
# Claude Agent SDK: ClaudeAgentOptions(hooks=consequa_hooks(calls))
|
|
198
|
+
from consequa_x.integrations.claude_agent_sdk import consequa_hooks
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
`consequa_x.otel` writes traces as OTLP/JSON with `execute_tool` spans named as
|
|
202
|
+
the OpenTelemetry GenAI conventions describe, emits them through
|
|
203
|
+
`opentelemetry-api`, and turns tool spans from other instrumentation into
|
|
204
|
+
recorded actions. See the
|
|
205
|
+
[framework guide](https://github.com/Devrajsinh-Jhala/consequa-x/blob/main/docs/framework-integration.md)
|
|
206
|
+
and the
|
|
207
|
+
[OpenTelemetry guide](https://github.com/Devrajsinh-Jhala/consequa-x/blob/main/docs/opentelemetry.md).
|
|
208
|
+
|
|
168
209
|
## Upgrading from 1.x
|
|
169
210
|
|
|
170
211
|
Version 2.0 changes the trace schema to `1.0` (several actions per trace, a
|
|
@@ -183,7 +224,8 @@ lists every change and its replacement.
|
|
|
183
224
|
| `consequa-x report TRACE --output FILE` | Render a self-contained HTML report; `--include-details` embeds the full capture, `--redact KEY` blanks named keys in it |
|
|
184
225
|
| `consequa-x summarize PATH... [--format markdown]` | Count outcomes, alignment and divergences across trace files, folders and `.jsonl` stores |
|
|
185
226
|
| `consequa-x compare A B` | Compare two traces action by action |
|
|
186
|
-
| `consequa-x verify TRACE --readback OBS --output NEW` | Verify
|
|
227
|
+
| `consequa-x verify TRACE --readback OBS --output NEW` | Verify captured readback with built-in verifiers; repeat `--readback` for an `all_of`/`any_of` contract |
|
|
228
|
+
| `consequa-x otel-export TRACE --output FILE` / `consequa-x otel-import FILE --output-dir DIR` | Write a trace as OpenTelemetry OTLP/JSON spans; restore traces exported with `--include-payloads` |
|
|
187
229
|
| `consequa-x validate TRACE...` / `consequa-x migrate OLD --output NEW` | Check traces; convert schema `0.1` traces |
|
|
188
230
|
| `consequa-x experiment …` and research commands | Paired replay, decision attribution and calibration studies (see Research) |
|
|
189
231
|
|