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