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.
Files changed (226) hide show
  1. {consequa_x-2.0.0 → consequa_x-2.1.1}/CHANGELOG.md +76 -1
  2. {consequa_x-2.0.0 → consequa_x-2.1.1}/CONTRIBUTING.md +2 -2
  3. {consequa_x-2.0.0 → consequa_x-2.1.1}/PKG-INFO +53 -8
  4. consequa_x-2.0.0/src/consequa_x.egg-info/PKG-INFO → consequa_x-2.1.1/README.md +242 -235
  5. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/application-integration.md +50 -1
  6. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/design-2.0.md +3 -3
  7. consequa_x-2.1.1/docs/framework-integration.md +219 -0
  8. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/migrating-to-2.0.md +1 -1
  9. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/offline-reports.md +1 -1
  10. consequa_x-2.1.1/docs/opentelemetry.md +119 -0
  11. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/product-roadmap.md +47 -28
  12. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/quickstart.md +13 -4
  13. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/release-notes.md +51 -0
  14. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/stable-api.md +13 -1
  15. consequa_x-2.1.1/docs/v2-migration-conformance.md +220 -0
  16. {consequa_x-2.0.0 → consequa_x-2.1.1}/examples/agent_loop_sqlite.py +3 -3
  17. consequa_x-2.1.1/examples/two_part_outcome.py +216 -0
  18. {consequa_x-2.0.0 → consequa_x-2.1.1}/pyproject.toml +9 -1
  19. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/build_public_docs.py +12 -12
  20. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/build_site_demo.py +92 -21
  21. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/check_installed_release.py +109 -2
  22. consequa_x-2.1.1/scripts/check_live_integrations.py +298 -0
  23. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/export_render_site.py +1 -1
  24. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/publish_release.py +2 -2
  25. consequa_x-2.1.1/scripts/run_v2_migration_conformance.py +754 -0
  26. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/__init__.py +4 -3
  27. consequa_x-2.1.1/src/consequa_x/benchmark/__init__.py +1 -0
  28. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/capture.py +23 -10
  29. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/cli.py +118 -26
  30. consequa_x-2.1.1/src/consequa_x/composite.py +335 -0
  31. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/errors.py +2 -2
  32. consequa_x-2.1.1/src/consequa_x/integrations/__init__.py +166 -0
  33. consequa_x-2.1.1/src/consequa_x/integrations/claude_agent_sdk.py +93 -0
  34. consequa_x-2.1.1/src/consequa_x/integrations/langchain.py +83 -0
  35. consequa_x-2.1.1/src/consequa_x/integrations/openai_agents.py +102 -0
  36. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/migrate.py +1 -1
  37. consequa_x-2.1.1/src/consequa_x/otel.py +621 -0
  38. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/readback.py +12 -8
  39. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/report.py +48 -7
  40. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/research.py +1 -1
  41. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/schema.py +1 -1
  42. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/schemas/trace-v1.0.json +1 -1
  43. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/verification.py +53 -18
  44. consequa_x-2.0.0/README.md → consequa_x-2.1.1/src/consequa_x.egg-info/PKG-INFO +280 -208
  45. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x.egg-info/SOURCES.txt +16 -0
  46. consequa_x-2.1.1/src/consequa_x.egg-info/requires.txt +18 -0
  47. consequa_x-2.1.1/tests/test_composite.py +331 -0
  48. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_installed_release_check.py +7 -0
  49. consequa_x-2.1.1/tests/test_integrations.py +339 -0
  50. consequa_x-2.1.1/tests/test_otel.py +235 -0
  51. consequa_x-2.1.1/tests/test_two_part_example.py +77 -0
  52. consequa_x-2.1.1/tests/test_v2_migration_conformance.py +323 -0
  53. consequa_x-2.0.0/docs/framework-integration.md +0 -125
  54. consequa_x-2.0.0/src/consequa_x/benchmark/__init__.py +0 -1
  55. consequa_x-2.0.0/src/consequa_x.egg-info/requires.txt +0 -6
  56. {consequa_x-2.0.0 → consequa_x-2.1.1}/LICENSE +0 -0
  57. {consequa_x-2.0.0 → consequa_x-2.1.1}/MANIFEST.in +0 -0
  58. {consequa_x-2.0.0 → consequa_x-2.1.1}/SECURITY.md +0 -0
  59. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/attribution-calibration.md +0 -0
  60. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/build-contract.md +0 -0
  61. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/car-reproduction-plan.md +0 -0
  62. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/completion-plan.md +0 -0
  63. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/decision-contrastive.md +0 -0
  64. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/decision-replay.md +0 -0
  65. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/decision-shapley.md +0 -0
  66. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/design.md +0 -0
  67. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/graph-witnesses.md +0 -0
  68. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/interaction-sampling.md +0 -0
  69. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/interval-followup-plan.md +0 -0
  70. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/launch-readiness.md +0 -0
  71. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/local-pypi-setup.md +0 -0
  72. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/matched-trace-judge.md +0 -0
  73. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/policy-evaluation.md +0 -0
  74. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/policy-replay.md +0 -0
  75. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/refund-interactions.md +0 -0
  76. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/release-readiness.md +0 -0
  77. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/research-roadmap.md +0 -0
  78. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/studies/matched-local-2026-10-18.json +0 -0
  79. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/studies/refund-family-candidates-v1.json +0 -0
  80. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/study-manifests.md +0 -0
  81. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/study-plan.md +0 -0
  82. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/tau-benchmark-validation.md +0 -0
  83. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/upstream-car-comparison.md +0 -0
  84. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/v1.1-release.md +0 -0
  85. {consequa_x-2.0.0 → consequa_x-2.1.1}/docs/variable-length-game-plan.md +0 -0
  86. {consequa_x-2.0.0 → consequa_x-2.1.1}/examples/artifact_delivery.py +0 -0
  87. {consequa_x-2.0.0 → consequa_x-2.1.1}/examples/decision_shapley_fixture.py +0 -0
  88. {consequa_x-2.0.0 → consequa_x-2.1.1}/examples/report_quickstart.py +0 -0
  89. {consequa_x-2.0.0 → consequa_x-2.1.1}/requirements-dev.lock +0 -0
  90. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/analyze_matched_local_study.py +0 -0
  91. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_interaction_sampling.py +0 -0
  92. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_interval_comparison.py +0 -0
  93. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_refund_interactions.py +0 -0
  94. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_release_artifacts.py +0 -0
  95. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/audit_review_revision.py +0 -0
  96. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/build_matched_study_figures.py +0 -0
  97. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/configure_pypi_auth.py +0 -0
  98. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/draw_paper_diagrams.py +0 -0
  99. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/finalize_interval_artifacts.py +0 -0
  100. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/finalize_matched_local_study.py +0 -0
  101. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/finalize_refund_artifacts.py +0 -0
  102. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/plot_interval_comparison.py +0 -0
  103. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/plot_paper_results.py +0 -0
  104. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/publish_alpha.py +0 -0
  105. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/refresh_sample_report.py +0 -0
  106. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_interaction_sampling.py +0 -0
  107. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_matched_local_study.py +0 -0
  108. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_matched_trace_judge.py +0 -0
  109. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_tau_benchmark_validation.py +0 -0
  110. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/run_upstream_car_study.py +0 -0
  111. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/summarize_interaction_sampling.py +0 -0
  112. {consequa_x-2.0.0 → consequa_x-2.1.1}/scripts/summarize_matched_execution.py +0 -0
  113. {consequa_x-2.0.0 → consequa_x-2.1.1}/setup.cfg +0 -0
  114. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/__main__.py +0 -0
  115. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/adapters/__init__.py +0 -0
  116. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/adapters/ollama.py +0 -0
  117. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/attribution.py +0 -0
  118. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/assessment_metrics.py +0 -0
  119. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/calibration.py +0 -0
  120. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/calibration_export.py +0 -0
  121. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/calibration_mechanisms.py +0 -0
  122. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/decision_coalition.py +0 -0
  123. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/decision_contrastive.py +0 -0
  124. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/decision_replay.py +0 -0
  125. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/decision_shapley.py +0 -0
  126. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/evaluation.py +0 -0
  127. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/interaction_export.py +0 -0
  128. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/interaction_mechanisms.py +0 -0
  129. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/interaction_sampling.py +0 -0
  130. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/interval_comparison.py +0 -0
  131. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/intervals.py +0 -0
  132. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/payments.py +0 -0
  133. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/policy_experiment.py +0 -0
  134. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/policy_runner.py +0 -0
  135. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/runner.py +0 -0
  136. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/study.py +0 -0
  137. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/targets.py +0 -0
  138. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/benchmark/templates.py +0 -0
  139. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/compare.py +0 -0
  140. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/explanation.py +0 -0
  141. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/graph.py +0 -0
  142. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/guard.py +0 -0
  143. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/mcp_capture.py +0 -0
  144. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/models.py +0 -0
  145. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/policies.py +0 -0
  146. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/py.typed +0 -0
  147. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/record_verifier.py +0 -0
  148. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/store.py +0 -0
  149. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x/summary.py +0 -0
  150. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x.egg-info/dependency_links.txt +0 -0
  151. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x.egg-info/entry_points.txt +0 -0
  152. {consequa_x-2.0.0 → consequa_x-2.1.1}/src/consequa_x.egg-info/top_level.txt +0 -0
  153. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/README.md +0 -0
  154. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/record-timeout-after-commit.json +0 -0
  155. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/refund-another-actor.json +0 -0
  156. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/refund-stale-readback.json +0 -0
  157. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/refund-timeout-after-commit.explanation.json +0 -0
  158. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/fixtures/v0.1/refund-timeout-after-commit.json +0 -0
  159. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_agent_loop_example.py +0 -0
  160. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_assessment_metrics.py +0 -0
  161. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_async_capture.py +0 -0
  162. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_attribution.py +0 -0
  163. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_calibration.py +0 -0
  164. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_calibration_cli.py +0 -0
  165. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_calibration_mechanisms.py +0 -0
  166. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_capture.py +0 -0
  167. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_cli.py +0 -0
  168. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_compare_verify_redact.py +0 -0
  169. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_coalition.py +0 -0
  170. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_contrastive.py +0 -0
  171. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_contrastive_cli.py +0 -0
  172. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_replay.py +0 -0
  173. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_shapley.py +0 -0
  174. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_decision_shapley_cli.py +0 -0
  175. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_docs_examples.py +0 -0
  176. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_errors.py +0 -0
  177. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_graph.py +0 -0
  178. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_graph_identity.py +0 -0
  179. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_integration.py +0 -0
  180. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interaction_sampling.py +0 -0
  181. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interaction_sampling_cli.py +0 -0
  182. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interaction_workers.py +0 -0
  183. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interval_comparison.py +0 -0
  184. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_interval_replay.py +0 -0
  185. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_intervals.py +0 -0
  186. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_baseline_audit.py +0 -0
  187. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_execution_summary.py +0 -0
  188. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_figure_builder.py +0 -0
  189. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_local_study.py +0 -0
  190. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_study_finalizer.py +0 -0
  191. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_matched_trace_judge.py +0 -0
  192. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_mcp_capture.py +0 -0
  193. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_migrate.py +0 -0
  194. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_model_eval_integration.py +0 -0
  195. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_models.py +0 -0
  196. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_multi_action.py +0 -0
  197. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_ollama.py +0 -0
  198. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_payments.py +0 -0
  199. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policies.py +0 -0
  200. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policy_evaluation.py +0 -0
  201. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policy_experiment.py +0 -0
  202. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policy_experiment_integration.py +0 -0
  203. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_policy_runner.py +0 -0
  204. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_prompt_profile_cli.py +0 -0
  205. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_public_integration.py +0 -0
  206. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_readback_guard.py +0 -0
  207. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_record_verifier.py +0 -0
  208. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_refund_interactions.py +0 -0
  209. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_refund_interactions_cli.py +0 -0
  210. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_release_helpers.py +0 -0
  211. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_release_inventory.py +0 -0
  212. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_render_site_export.py +0 -0
  213. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_replay_targets.py +0 -0
  214. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_report.py +0 -0
  215. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_report_cli.py +0 -0
  216. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_research_integration.py +0 -0
  217. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_schema.py +0 -0
  218. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_site_demo.py +0 -0
  219. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_snapshot_integrity.py +0 -0
  220. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_stable_release.py +0 -0
  221. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_study.py +0 -0
  222. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_summary_store.py +0 -0
  223. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_task_templates.py +0 -0
  224. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_tau_benchmark_validation.py +0 -0
  225. {consequa_x-2.0.0 → consequa_x-2.1.1}/tests/test_upstream_car_study.py +0 -0
  226. {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/Consequa-X_IEEE_Paper.pdf) compiled and all
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 Consequa-X
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 3.12:
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.0.0
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
- # Consequa-X
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
- Consequa-X keeps four things apart: the **tool response**, what the **agent
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
- Consequa-X checks that receipts bind to the supplied action, contract and
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 a captured readback file with a built-in verifier |
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.12 and on one Alpine Linux virtual machine with Python
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