consequa-x 2.0.0__tar.gz → 2.1.1__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.1}/CHANGELOG.md +76 -1
- {consequa_x-2.0.0 → consequa_x-2.1.1}/CONTRIBUTING.md +2 -2
- {consequa_x-2.0.0 → consequa_x-2.1.1}/PKG-INFO +53 -8
- consequa_x-2.0.0/src/consequa_x.egg-info/PKG-INFO → consequa_x-2.1.1/README.md +242 -235
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/application-integration.md +50 -1
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/design-2.0.md +3 -3
- consequa_x-2.1.1/docs/framework-integration.md +219 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/migrating-to-2.0.md +1 -1
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/offline-reports.md +1 -1
- consequa_x-2.1.1/docs/opentelemetry.md +119 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/product-roadmap.md +47 -28
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/quickstart.md +13 -4
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/release-notes.md +51 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/stable-api.md +13 -1
- consequa_x-2.1.1/docs/v2-migration-conformance.md +220 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/examples/agent_loop_sqlite.py +3 -3
- consequa_x-2.1.1/examples/two_part_outcome.py +216 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/pyproject.toml +9 -1
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/build_public_docs.py +12 -12
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/build_site_demo.py +92 -21
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/check_installed_release.py +109 -2
- consequa_x-2.1.1/scripts/check_live_integrations.py +298 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/export_render_site.py +1 -1
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/publish_release.py +2 -2
- consequa_x-2.1.1/scripts/run_v2_migration_conformance.py +754 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/__init__.py +4 -3
- consequa_x-2.1.1/src/consequa_x/benchmark/__init__.py +1 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/capture.py +23 -10
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/cli.py +118 -26
- consequa_x-2.1.1/src/consequa_x/composite.py +335 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/errors.py +2 -2
- consequa_x-2.1.1/src/consequa_x/integrations/__init__.py +166 -0
- consequa_x-2.1.1/src/consequa_x/integrations/claude_agent_sdk.py +93 -0
- consequa_x-2.1.1/src/consequa_x/integrations/langchain.py +83 -0
- consequa_x-2.1.1/src/consequa_x/integrations/openai_agents.py +102 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/migrate.py +1 -1
- consequa_x-2.1.1/src/consequa_x/otel.py +621 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/readback.py +12 -8
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/report.py +48 -7
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/research.py +1 -1
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/schema.py +1 -1
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/schemas/trace-v1.0.json +1 -1
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/verification.py +53 -18
- consequa_x-2.0.0/README.md → consequa_x-2.1.1/src/consequa_x.egg-info/PKG-INFO +280 -208
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x.egg-info/SOURCES.txt +16 -0
- consequa_x-2.1.1/src/consequa_x.egg-info/requires.txt +18 -0
- consequa_x-2.1.1/tests/test_composite.py +331 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_installed_release_check.py +7 -0
- consequa_x-2.1.1/tests/test_integrations.py +339 -0
- consequa_x-2.1.1/tests/test_otel.py +235 -0
- consequa_x-2.1.1/tests/test_two_part_example.py +77 -0
- consequa_x-2.1.1/tests/test_v2_migration_conformance.py +323 -0
- consequa_x-2.0.0/docs/framework-integration.md +0 -125
- consequa_x-2.0.0/src/consequa_x/benchmark/__init__.py +0 -1
- consequa_x-2.0.0/src/consequa_x.egg-info/requires.txt +0 -6
- {consequa_x-2.0.0 → consequa_x-2.1.1}/LICENSE +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/MANIFEST.in +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/SECURITY.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/attribution-calibration.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/build-contract.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/car-reproduction-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/completion-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/decision-contrastive.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/decision-replay.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/decision-shapley.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/design.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/graph-witnesses.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/interaction-sampling.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/interval-followup-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/launch-readiness.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/local-pypi-setup.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/matched-trace-judge.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/policy-evaluation.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/policy-replay.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/refund-interactions.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/release-readiness.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/research-roadmap.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/studies/matched-local-2026-10-18.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/studies/refund-family-candidates-v1.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/study-manifests.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/study-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/tau-benchmark-validation.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/upstream-car-comparison.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/v1.1-release.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/variable-length-game-plan.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/examples/artifact_delivery.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/examples/decision_shapley_fixture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/examples/report_quickstart.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/requirements-dev.lock +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/analyze_matched_local_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_interval_comparison.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_refund_interactions.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_release_artifacts.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_review_revision.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/build_matched_study_figures.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/configure_pypi_auth.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/draw_paper_diagrams.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/finalize_interval_artifacts.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/finalize_matched_local_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/finalize_refund_artifacts.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/plot_interval_comparison.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/plot_paper_results.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/publish_alpha.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/refresh_sample_report.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_matched_local_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_matched_trace_judge.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_tau_benchmark_validation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_upstream_car_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/summarize_interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/summarize_matched_execution.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/setup.cfg +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/__main__.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/adapters/__init__.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/adapters/ollama.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/attribution.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/assessment_metrics.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/calibration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/calibration_export.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/calibration_mechanisms.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/decision_coalition.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/decision_contrastive.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/decision_replay.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/decision_shapley.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/evaluation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/interaction_export.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/interaction_mechanisms.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/interval_comparison.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/intervals.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/payments.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/policy_experiment.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/policy_runner.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/runner.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/targets.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/templates.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/compare.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/explanation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/graph.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/guard.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/mcp_capture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/models.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/policies.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/py.typed +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/record_verifier.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/store.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/summary.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x.egg-info/dependency_links.txt +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x.egg-info/entry_points.txt +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x.egg-info/top_level.txt +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/README.md +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/record-timeout-after-commit.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/refund-another-actor.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/refund-stale-readback.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/refund-timeout-after-commit.explanation.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/refund-timeout-after-commit.json +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_agent_loop_example.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_assessment_metrics.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_async_capture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_attribution.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_calibration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_calibration_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_calibration_mechanisms.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_capture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_compare_verify_redact.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_coalition.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_contrastive.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_contrastive_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_replay.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_shapley.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_shapley_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_docs_examples.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_errors.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_graph.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_graph_identity.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interaction_sampling.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interaction_sampling_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interaction_workers.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interval_comparison.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interval_replay.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_intervals.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_baseline_audit.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_execution_summary.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_figure_builder.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_local_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_study_finalizer.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_trace_judge.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_mcp_capture.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_migrate.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_model_eval_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_models.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_multi_action.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_ollama.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_payments.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policies.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policy_evaluation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policy_experiment.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policy_experiment_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policy_runner.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_prompt_profile_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_public_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_readback_guard.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_record_verifier.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_refund_interactions.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_refund_interactions_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_release_helpers.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_release_inventory.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_render_site_export.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_replay_targets.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_report.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_report_cli.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_research_integration.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_schema.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_site_demo.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_snapshot_integrity.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_stable_release.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_summary_store.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_task_templates.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_tau_benchmark_validation.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_upstream_car_study.py +0 -0
- {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_verification.py +0 -0
|
@@ -1,10 +1,85 @@
|
|
|
1
1
|
# Changes
|
|
2
2
|
|
|
3
|
+
## 2.1.1 - 19 October 2026
|
|
4
|
+
|
|
5
|
+
A maintenance release; the API and trace schema are unchanged.
|
|
6
|
+
|
|
7
|
+
- The project's name is written ConseqaX: README, documentation, report title
|
|
8
|
+
and footer, the trace schema's title and command-line text. The package,
|
|
9
|
+
command and import names stay `consequa-x` and `consequa_x`.
|
|
10
|
+
- Python 3.13, 3.14 and 3.15 are tested and declared (PyPI classifiers and
|
|
11
|
+
documentation), alongside 3.11 and 3.12.
|
|
12
|
+
- Each framework integration was also run with a real model in a real agent
|
|
13
|
+
loop (`scripts/check_live_integrations.py`); the recorded attempts matched
|
|
14
|
+
the tool calls that ran.
|
|
15
|
+
- New example `examples/two_part_outcome.py`: an `all_of` contract over a refund
|
|
16
|
+
and a ticket closure, read back from two SQLite files.
|
|
17
|
+
|
|
18
|
+
## 2.1.0 - 19 October 2026
|
|
19
|
+
|
|
20
|
+
Additive: the roadmap features left out of 2.0.0 (verifier composition,
|
|
21
|
+
framework integrations and OpenTelemetry). Schema `1.0` and the 2.0 API are
|
|
22
|
+
unchanged, and the core still has no required runtime dependency. Published
|
|
23
|
+
to PyPI with registry hashes verified; see the
|
|
24
|
+
[release record](output/release-2.1.0-2026-10-19/README.md). Installed checks
|
|
25
|
+
passed on Windows Python 3.11.9 and 3.12.10, on one Alpine Linux 3.24.2 QEMU
|
|
26
|
+
guest with Python 3.14.8 and from a fresh PyPI install; the integrations passed against the installed wheel
|
|
27
|
+
with each SDK present. macOS has never been tested.
|
|
28
|
+
|
|
29
|
+
- Verifier composition. `all_of(contract_id, *parts)` and `any_of(...)` build
|
|
30
|
+
one outcome contract from part contracts, each with its own predicate,
|
|
31
|
+
expected values and timing; `contract_parts` decodes and checks them.
|
|
32
|
+
`CompositeVerifier({part_id: verifier}, sources={part_id: source})` checks
|
|
33
|
+
each part against the readback from its source and combines the receipts
|
|
34
|
+
with three-valued logic: `all_of` is violated when any part is violated and
|
|
35
|
+
satisfied when all are; `any_of` is satisfied when any part is and violated
|
|
36
|
+
when all are; otherwise the outcome stays `unknown`. A part without readback
|
|
37
|
+
is `unknown`. The receipt keeps each part's evidence (tagged with its part
|
|
38
|
+
ID, status, origin and reason), the union of the parts' effects and
|
|
39
|
+
findings, and adds `PART_VIOLATED`, `PART_UNKNOWN` and `PART_OTHER_ACTOR`.
|
|
40
|
+
Target matching is conservative, so an agent's report is judged only when
|
|
41
|
+
the deciding parts did target matching. Parts can nest.
|
|
42
|
+
- Several readbacks per verification: `verify`, `averify`,
|
|
43
|
+
`ActionCapture.verify`/`averify` and `poll_readback` (whose `read` may return
|
|
44
|
+
one observation per source) accept a sequence of observations for a verifier
|
|
45
|
+
that provides `verify_readbacks`. Receipts are still checked against every
|
|
46
|
+
supplied observation.
|
|
47
|
+
- Reports describe an `all_of`/`any_of` contract's structure (part count,
|
|
48
|
+
each part's deadline and horizon) and list each recorded part result, without
|
|
49
|
+
showing part payloads.
|
|
50
|
+
- `consequa-x verify` takes `--readback` once per source, plus
|
|
51
|
+
`--part-source PART=SOURCE` and `--scope-field PART=FIELD` for composite
|
|
52
|
+
contracts.
|
|
53
|
+
- OpenTelemetry (`consequa_x.otel`): `to_otlp` writes an OTLP/JSON document
|
|
54
|
+
with a span per action, an `execute_tool` span per attempt named as the GenAI
|
|
55
|
+
semantic conventions describe, and a span per verification, with
|
|
56
|
+
`consequa_x.*` attributes for state, origin, alignment and diagnosis codes.
|
|
57
|
+
Payloads are opt-in (`include_payloads=True`, which also embeds the complete
|
|
58
|
+
trace for `from_otlp`). `emit` creates the spans through `opentelemetry-api`
|
|
59
|
+
(extra `otel`). `record_tool_spans` turns `execute_tool` spans from any
|
|
60
|
+
GenAI instrumentation into recorded actions for the contracts the
|
|
61
|
+
application supplies. New commands: `otel-export` and `otel-import`.
|
|
62
|
+
- Framework integrations (`consequa_x.integrations`): `ToolCallCapture` and
|
|
63
|
+
`ToolCall` record framework tool calls for the calls `contract_for` makes
|
|
64
|
+
consequential, grouping retries through `action_id_for`. Optional extras:
|
|
65
|
+
`openai-agents` (`consequential_tool`, in place of `function_tool`),
|
|
66
|
+
`langchain` (`ConsequaCallbackHandler`) and `claude-agent-sdk`
|
|
67
|
+
(`consequa_hooks` for `PreToolUse`, `PostToolUse` and
|
|
68
|
+
`PostToolUseFailure`). Tested offline with openai-agents 0.24.0,
|
|
69
|
+
langchain-core 1.6.12, claude-agent-sdk 0.2.168 and opentelemetry 1.45.1; no
|
|
70
|
+
live model was called.
|
|
71
|
+
- Report tables scroll inside their frame on narrow screens; their cells no
|
|
72
|
+
longer collapse to one character per line (present since 2.0).
|
|
73
|
+
|
|
3
74
|
## 2.0.0 - 19 October 2026 (breaking)
|
|
4
75
|
|
|
5
76
|
See [the 2.0 design](docs/design-2.0.md) and the
|
|
6
77
|
[migration guide](docs/migrating-to-2.0.md). Deferred to 2.1: verifier
|
|
7
78
|
composition, optional framework integrations and OpenTelemetry export.
|
|
79
|
+
Published to PyPI with registry hashes verified; see the
|
|
80
|
+
[release record](output/release-2.0.0-2026-10-19/README.md). Installed checks
|
|
81
|
+
passed on Windows Python 3.11.9 and 3.12.10, on one Alpine Linux 3.24.2 QEMU guest
|
|
82
|
+
with Python 3.14.8 and from a fresh PyPI install. macOS has never been tested.
|
|
8
83
|
|
|
9
84
|
- Typed exceptions: every intentional error derives from `ConsequaError` and
|
|
10
85
|
still from `ValueError` or `TypeError`. `ValidationError` (invalid records,
|
|
@@ -209,7 +284,7 @@ preselected complete traces. The
|
|
|
209
284
|
[derived findings](output/interaction-sampling-findings-2026-10-15/FINDINGS.md)
|
|
210
285
|
retain coverage, width, detection and refusal denominators. The defined
|
|
211
286
|
framework and protocol/software paper scope is complete on 16 October 2026:
|
|
212
|
-
the [illustrated eight-page IEEE PDF](output/pdf/
|
|
287
|
+
the [illustrated eight-page IEEE PDF](output/pdf/ConseqaX_IEEE_Paper.pdf) compiled and all
|
|
213
288
|
rendered pages passed visual review. The [QA receipt](output/pdf/qa.json) binds
|
|
214
289
|
it to the frozen [editable source](paper/consequa-x-ieee.tex) and four vector
|
|
215
290
|
figures. Actual venue selection, final human
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Contributing to
|
|
1
|
+
# Contributing to ConseqaX
|
|
2
2
|
|
|
3
3
|
Thanks for helping. This public repository holds the Python package, its tests
|
|
4
4
|
and documentation, the website, and the research records behind the paper. The
|
|
@@ -23,7 +23,7 @@ to a pull request. Report vulnerabilities privately as described in
|
|
|
23
23
|
|
|
24
24
|
## Set up a development environment
|
|
25
25
|
|
|
26
|
-
Fork and clone the repository, then create a branch for your change. Use Python 3.11 or
|
|
26
|
+
Fork and clone the repository, then create a branch for your change. Use Python 3.11 or newer:
|
|
27
27
|
|
|
28
28
|
```sh
|
|
29
29
|
python -m venv .venv
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: consequa-x
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Summary: Evidence-aware explanation of consequential agent actions
|
|
5
5
|
Author: Devrajsinh Jhala
|
|
6
6
|
License-Expression: MIT
|
|
@@ -14,18 +14,29 @@ Classifier: Development Status :: 5 - Production/Stable
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
17
20
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
21
|
Requires-Python: >=3.11
|
|
19
22
|
Description-Content-Type: text/markdown
|
|
20
23
|
License-File: LICENSE
|
|
24
|
+
Provides-Extra: claude-agent-sdk
|
|
25
|
+
Requires-Dist: claude-agent-sdk>=0.2.168; extra == "claude-agent-sdk"
|
|
21
26
|
Provides-Extra: dev
|
|
22
27
|
Requires-Dist: pytest>=8; extra == "dev"
|
|
23
28
|
Requires-Dist: build>=1.2; extra == "dev"
|
|
24
29
|
Requires-Dist: ruff>=0.8; extra == "dev"
|
|
25
30
|
Requires-Dist: jsonschema>=4.23; extra == "dev"
|
|
31
|
+
Provides-Extra: langchain
|
|
32
|
+
Requires-Dist: langchain-core>=1.6; extra == "langchain"
|
|
33
|
+
Provides-Extra: openai-agents
|
|
34
|
+
Requires-Dist: openai-agents>=0.24; extra == "openai-agents"
|
|
35
|
+
Provides-Extra: otel
|
|
36
|
+
Requires-Dist: opentelemetry-api>=1.45; extra == "otel"
|
|
26
37
|
Dynamic: license-file
|
|
27
38
|
|
|
28
|
-
#
|
|
39
|
+
# ConseqaX
|
|
29
40
|
|
|
30
41
|
**Evidence-aware explanation of consequential agent actions.**
|
|
31
42
|
|
|
@@ -34,7 +45,7 @@ database write), the tool's response is only part of the story. A timeout can
|
|
|
34
45
|
hide a refund that went through. A "success" can hide one that never landed.
|
|
35
46
|
Another actor can produce the very outcome the agent was asked for.
|
|
36
47
|
|
|
37
|
-
|
|
48
|
+
ConseqaX keeps four things apart: the **tool response**, what the **agent
|
|
38
49
|
reported**, the outcome established by an **independent read-only readback**, and
|
|
39
50
|
**who produced the effect**. Missing, stale or incomplete evidence stays
|
|
40
51
|
`unknown` instead of being guessed.
|
|
@@ -53,7 +64,9 @@ python -m pip install consequa-x
|
|
|
53
64
|
consequa-x --version
|
|
54
65
|
```
|
|
55
66
|
|
|
56
|
-
Use `python -m consequa_x` wherever a command below uses `consequa-x`.
|
|
67
|
+
Use `python -m consequa_x` wherever a command below uses `consequa-x`. Optional
|
|
68
|
+
extras add framework integrations and OpenTelemetry: `consequa-x[openai-agents]`,
|
|
69
|
+
`consequa-x[langchain]`, `consequa-x[claude-agent-sdk]` and `consequa-x[otel]`.
|
|
57
70
|
|
|
58
71
|
## See it in a minute
|
|
59
72
|
|
|
@@ -156,7 +169,7 @@ receipt = verify(action, observation, verifier=MyVerifier())
|
|
|
156
169
|
```
|
|
157
170
|
|
|
158
171
|
Your application owns source trust, scope, completeness, timing and provenance;
|
|
159
|
-
|
|
172
|
+
ConseqaX checks that receipts bind to the supplied action, contract and
|
|
160
173
|
observation, and keeps the evidence structured. The
|
|
161
174
|
[artifact-delivery example](https://github.com/Devrajsinh-Jhala/consequa-x/blob/main/examples/artifact_delivery.py)
|
|
162
175
|
implements a verifier with public APIs only, and the
|
|
@@ -165,6 +178,37 @@ describes the boundary in detail. The
|
|
|
165
178
|
[stable API](https://github.com/Devrajsinh-Jhala/consequa-x/blob/main/docs/stable-api.md)
|
|
166
179
|
page lists what version 2 guarantees.
|
|
167
180
|
|
|
181
|
+
An outcome with several required effects (a refund *and* a closed ticket, or a
|
|
182
|
+
refund *or* store credit) is one contract: `all_of(...)` or `any_of(...)` over
|
|
183
|
+
part contracts, checked by `CompositeVerifier` with one readback per source.
|
|
184
|
+
Unknown parts keep the whole outcome unknown unless another part already
|
|
185
|
+
settles it.
|
|
186
|
+
|
|
187
|
+
## Agent frameworks and OpenTelemetry
|
|
188
|
+
|
|
189
|
+
Optional integrations record an agent framework's tool calls through the same
|
|
190
|
+
recorder. Your `contract_for(call)` decides which calls are consequential:
|
|
191
|
+
|
|
192
|
+
```python
|
|
193
|
+
from consequa_x.integrations import ToolCallCapture
|
|
194
|
+
calls = ToolCallCapture(rec, contract_for=contract_for)
|
|
195
|
+
|
|
196
|
+
# OpenAI Agents SDK: use in place of @function_tool
|
|
197
|
+
from consequa_x.integrations.openai_agents import consequential_tool
|
|
198
|
+
# LangChain: config={"callbacks": [ConsequaCallbackHandler(calls)]}
|
|
199
|
+
from consequa_x.integrations.langchain import ConsequaCallbackHandler
|
|
200
|
+
# Claude Agent SDK: ClaudeAgentOptions(hooks=consequa_hooks(calls))
|
|
201
|
+
from consequa_x.integrations.claude_agent_sdk import consequa_hooks
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
`consequa_x.otel` writes traces as OTLP/JSON with `execute_tool` spans named as
|
|
205
|
+
the OpenTelemetry GenAI conventions describe, emits them through
|
|
206
|
+
`opentelemetry-api`, and turns tool spans from other instrumentation into
|
|
207
|
+
recorded actions. See the
|
|
208
|
+
[framework guide](https://github.com/Devrajsinh-Jhala/consequa-x/blob/main/docs/framework-integration.md)
|
|
209
|
+
and the
|
|
210
|
+
[OpenTelemetry guide](https://github.com/Devrajsinh-Jhala/consequa-x/blob/main/docs/opentelemetry.md).
|
|
211
|
+
|
|
168
212
|
## Upgrading from 1.x
|
|
169
213
|
|
|
170
214
|
Version 2.0 changes the trace schema to `1.0` (several actions per trace, a
|
|
@@ -183,7 +227,8 @@ lists every change and its replacement.
|
|
|
183
227
|
| `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
228
|
| `consequa-x summarize PATH... [--format markdown]` | Count outcomes, alignment and divergences across trace files, folders and `.jsonl` stores |
|
|
185
229
|
| `consequa-x compare A B` | Compare two traces action by action |
|
|
186
|
-
| `consequa-x verify TRACE --readback OBS --output NEW` | Verify
|
|
230
|
+
| `consequa-x verify TRACE --readback OBS --output NEW` | Verify captured readback with built-in verifiers; repeat `--readback` for an `all_of`/`any_of` contract |
|
|
231
|
+
| `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
232
|
| `consequa-x validate TRACE...` / `consequa-x migrate OLD --output NEW` | Check traces; convert schema `0.1` traces |
|
|
188
233
|
| `consequa-x experiment …` and research commands | Paired replay, decision attribution and calibration studies (see Research) |
|
|
189
234
|
|
|
@@ -210,8 +255,8 @@ and the [paper notes](https://github.com/Devrajsinh-Jhala/consequa-x/blob/main/p
|
|
|
210
255
|
## Platforms
|
|
211
256
|
|
|
212
257
|
The package is pure Python. Released wheels have been install-tested on Windows
|
|
213
|
-
with Python 3.11 and 3.
|
|
214
|
-
3.14. macOS has not been tested yet. See the
|
|
258
|
+
with Python 3.11, 3.12, 3.13, 3.14 and 3.15, and on one Alpine Linux virtual
|
|
259
|
+
machine with Python 3.14. macOS has not been tested yet. See the
|
|
215
260
|
[release notes](https://consequa-x.onrender.com/changelog.html) for exact
|
|
216
261
|
environments.
|
|
217
262
|
|