tracefork 0.2.0__tar.gz → 0.2.2__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 (176) hide show
  1. {tracefork-0.2.0 → tracefork-0.2.2}/.github/workflows/ci.yml +3 -1
  2. {tracefork-0.2.0 → tracefork-0.2.2}/.github/workflows/release.yml +2 -2
  3. {tracefork-0.2.0 → tracefork-0.2.2}/.gitignore +2 -0
  4. tracefork-0.2.2/CHANGELOG.md +665 -0
  5. tracefork-0.2.2/CLAUDE.md +571 -0
  6. {tracefork-0.2.0 → tracefork-0.2.2}/PKG-INFO +182 -24
  7. {tracefork-0.2.0 → tracefork-0.2.2}/README.md +166 -19
  8. tracefork-0.2.2/docs/packaging-decisions.md +170 -0
  9. tracefork-0.2.2/docs/plugin-api.md +171 -0
  10. tracefork-0.2.2/examples/plugin_example/README.md +35 -0
  11. tracefork-0.2.2/examples/plugin_example/plugin_example/__init__.py +3 -0
  12. tracefork-0.2.2/examples/plugin_example/plugin_example/matcher.py +67 -0
  13. tracefork-0.2.2/examples/plugin_example/pyproject.toml +24 -0
  14. {tracefork-0.2.0 → tracefork-0.2.2}/pyproject.toml +43 -10
  15. tracefork-0.2.2/scripts/check_executed_evidence.py +168 -0
  16. {tracefork-0.2.0 → tracefork-0.2.2}/scripts/e2e.sh +5 -2
  17. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/__init__.py +15 -0
  18. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/adapters/__init__.py +19 -3
  19. tracefork-0.2.2/src/tracefork/adapters/adk.py +465 -0
  20. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/adapters/autogen.py +11 -3
  21. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/adapters/crewai.py +11 -3
  22. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/adapters/langchain.py +22 -6
  23. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/adapters/openai_agents.py +11 -3
  24. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/bench.py +37 -4
  25. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/blame.py +298 -39
  26. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/boundary_guard.py +108 -1
  27. tracefork-0.2.2/src/tracefork/bundle.py +122 -0
  28. tracefork-0.2.2/src/tracefork/certificate.py +134 -0
  29. tracefork-0.2.2/src/tracefork/checkpoint.py +151 -0
  30. tracefork-0.2.2/src/tracefork/ci_calibration.py +207 -0
  31. tracefork-0.2.2/src/tracefork/cli.py +1594 -0
  32. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/competing_faults.py +222 -1
  33. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/constants.py +5 -1
  34. tracefork-0.2.2/src/tracefork/coverage.py +227 -0
  35. tracefork-0.2.2/src/tracefork/diff.py +169 -0
  36. tracefork-0.2.2/src/tracefork/fork.py +696 -0
  37. tracefork-0.2.2/src/tracefork/fsck.py +116 -0
  38. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/interop.py +26 -6
  39. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/matcher.py +11 -0
  40. tracefork-0.2.2/src/tracefork/receipt.py +160 -0
  41. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/record_mode.py +18 -20
  42. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/recorder.py +74 -4
  43. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/replay.py +45 -2
  44. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/report.py +25 -2
  45. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/server.py +31 -3
  46. tracefork-0.2.2/src/tracefork/store.py +1197 -0
  47. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/tape.py +53 -12
  48. tracefork-0.2.2/src/tracefork/tournament.py +397 -0
  49. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/transport.py +77 -5
  50. tracefork-0.2.2/tests/required_test_ids.txt +55 -0
  51. tracefork-0.2.2/tests/test_adapters_adk.py +305 -0
  52. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_adapters_autogen.py +2 -1
  53. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_adapters_crewai.py +2 -1
  54. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_adapters_langchain.py +4 -2
  55. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_adapters_openai_agents.py +2 -1
  56. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_bench.py +11 -9
  57. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_blame.py +463 -0
  58. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_boundary_guard.py +91 -1
  59. tracefork-0.2.2/tests/test_bundle.py +205 -0
  60. tracefork-0.2.2/tests/test_causal_edges.py +235 -0
  61. tracefork-0.2.2/tests/test_certificate.py +175 -0
  62. tracefork-0.2.2/tests/test_check_executed_evidence.py +130 -0
  63. tracefork-0.2.2/tests/test_checkpoint.py +151 -0
  64. tracefork-0.2.2/tests/test_ci_calibration.py +100 -0
  65. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_cli.py +32 -0
  66. tracefork-0.2.2/tests/test_cli_smoke.py +892 -0
  67. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_competing_faults.py +58 -0
  68. tracefork-0.2.2/tests/test_coverage.py +132 -0
  69. tracefork-0.2.2/tests/test_diff.py +206 -0
  70. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_e2e.py +5 -4
  71. tracefork-0.2.2/tests/test_fork.py +664 -0
  72. tracefork-0.2.2/tests/test_fsck.py +107 -0
  73. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_interop.py +53 -0
  74. tracefork-0.2.2/tests/test_plugin_example.py +114 -0
  75. tracefork-0.2.2/tests/test_property_matcher.py +63 -0
  76. tracefork-0.2.2/tests/test_property_tape.py +130 -0
  77. tracefork-0.2.2/tests/test_receipt.py +271 -0
  78. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_record_mode.py +11 -12
  79. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_replay.py +37 -1
  80. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_report.py +133 -1
  81. tracefork-0.2.2/tests/test_sessions.py +231 -0
  82. tracefork-0.2.2/tests/test_storage.py +939 -0
  83. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_tape.py +29 -0
  84. tracefork-0.2.2/tests/test_tournament.py +244 -0
  85. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_transport.py +69 -0
  86. {tracefork-0.2.0 → tracefork-0.2.2}/uv.lock +199 -6
  87. {tracefork-0.2.0 → tracefork-0.2.2}/web/report.html +137 -1
  88. tracefork-0.2.0/CHANGELOG.md +0 -124
  89. tracefork-0.2.0/CLAUDE.md +0 -236
  90. tracefork-0.2.0/src/tracefork/cli.py +0 -766
  91. tracefork-0.2.0/src/tracefork/fork.py +0 -370
  92. tracefork-0.2.0/src/tracefork/store.py +0 -175
  93. tracefork-0.2.0/tests/test_cli_smoke.py +0 -360
  94. tracefork-0.2.0/tests/test_fork.py +0 -313
  95. tracefork-0.2.0/tests/test_storage.py +0 -248
  96. {tracefork-0.2.0 → tracefork-0.2.2}/.editorconfig +0 -0
  97. {tracefork-0.2.0 → tracefork-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  98. {tracefork-0.2.0 → tracefork-0.2.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  99. {tracefork-0.2.0 → tracefork-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  100. {tracefork-0.2.0 → tracefork-0.2.2}/.github/dependabot.yml +0 -0
  101. {tracefork-0.2.0 → tracefork-0.2.2}/.github/pull_request_template.md +0 -0
  102. {tracefork-0.2.0 → tracefork-0.2.2}/.pre-commit-config.yaml +0 -0
  103. {tracefork-0.2.0 → tracefork-0.2.2}/CODE_OF_CONDUCT.md +0 -0
  104. {tracefork-0.2.0 → tracefork-0.2.2}/CONTRIBUTING.md +0 -0
  105. {tracefork-0.2.0 → tracefork-0.2.2}/LICENSE +0 -0
  106. {tracefork-0.2.0 → tracefork-0.2.2}/SECURITY.md +0 -0
  107. {tracefork-0.2.0 → tracefork-0.2.2}/SPIKE0.md +0 -0
  108. {tracefork-0.2.0 → tracefork-0.2.2}/docs/demo.png +0 -0
  109. {tracefork-0.2.0 → tracefork-0.2.2}/examples/demo_report.py +0 -0
  110. {tracefork-0.2.0 → tracefork-0.2.2}/experiments/replay_fixtures/manifest.json +0 -0
  111. {tracefork-0.2.0 → tracefork-0.2.2}/experiments/replay_fixtures/single_turn.tape.sqlite +0 -0
  112. {tracefork-0.2.0 → tracefork-0.2.2}/experiments/replay_fixtures/two_turn.tape.sqlite +0 -0
  113. {tracefork-0.2.0 → tracefork-0.2.2}/experiments/validation_report_committed.json +0 -0
  114. {tracefork-0.2.0 → tracefork-0.2.2}/scripts/gen_replay_fixtures.py +0 -0
  115. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/adapters/base.py +0 -0
  116. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/bedrock_transport.py +0 -0
  117. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/config.py +0 -0
  118. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/data/pricing.json +0 -0
  119. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/divergence.py +0 -0
  120. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/eventstream.py +0 -0
  121. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/faults.py +0 -0
  122. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/fixtures.py +0 -0
  123. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/judge.py +0 -0
  124. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/mcp_client.py +0 -0
  125. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/nondet.py +0 -0
  126. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/observability.py +0 -0
  127. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/plugins.py +0 -0
  128. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/pricing.py +0 -0
  129. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/providers/__init__.py +0 -0
  130. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/providers/anthropic.py +0 -0
  131. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/providers/base.py +0 -0
  132. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/providers/bedrock.py +0 -0
  133. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/providers/gemini.py +0 -0
  134. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/providers/openai.py +0 -0
  135. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/proxy.py +0 -0
  136. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/py.typed +0 -0
  137. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/redact.py +0 -0
  138. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/synthetic.py +0 -0
  139. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/tools.py +0 -0
  140. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/validate.py +0 -0
  141. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork/wire.py +0 -0
  142. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork_spike/__init__.py +0 -0
  143. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork_spike/__main__.py +0 -0
  144. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork_spike/agent.py +0 -0
  145. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork_spike/fake_llm.py +0 -0
  146. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork_spike/nondet.py +0 -0
  147. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork_spike/spike.py +0 -0
  148. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork_spike/tape.py +0 -0
  149. {tracefork-0.2.0 → tracefork-0.2.2}/src/tracefork_spike/transport.py +0 -0
  150. {tracefork-0.2.0 → tracefork-0.2.2}/tests/__init__.py +0 -0
  151. {tracefork-0.2.0 → tracefork-0.2.2}/tests/fakes.py +0 -0
  152. {tracefork-0.2.0 → tracefork-0.2.2}/tests/fixtures/legacy_tape_v1.blob +0 -0
  153. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_adapters_base.py +0 -0
  154. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_bedrock_eventstream.py +0 -0
  155. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_bedrock_provider.py +0 -0
  156. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_bedrock_transport.py +0 -0
  157. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_concurrency.py +0 -0
  158. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_config.py +0 -0
  159. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_divergence.py +0 -0
  160. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_faults.py +0 -0
  161. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_gemini_provider.py +0 -0
  162. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_judge.py +0 -0
  163. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_matcher.py +0 -0
  164. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_mcp_client.py +0 -0
  165. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_nondet.py +0 -0
  166. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_observability.py +0 -0
  167. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_openai_provider.py +0 -0
  168. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_plugins.py +0 -0
  169. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_pricing.py +0 -0
  170. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_provider_faults.py +0 -0
  171. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_providers.py +0 -0
  172. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_proxy.py +0 -0
  173. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_recorder.py +0 -0
  174. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_redact.py +0 -0
  175. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_spike0.py +0 -0
  176. {tracefork-0.2.0 → tracefork-0.2.2}/tests/test_tools.py +0 -0
@@ -27,7 +27,9 @@ jobs:
27
27
  - name: Type check
28
28
  run: uv run mypy src/tracefork
29
29
  - name: Tests + coverage
30
- run: uv run pytest -q --cov --cov-report=term-missing
30
+ run: uv run pytest -q --cov --cov-report=term-missing --junit-xml=junit.xml
31
+ - name: Executed-evidence CI sentinel
32
+ run: uv run python scripts/check_executed_evidence.py
31
33
  - name: Self-validation regression gate
32
34
  run: uv run tracefork validate --check
33
35
  - name: Build distribution
@@ -20,9 +20,9 @@ jobs:
20
20
  permissions:
21
21
  id-token: write # OIDC token for PyPI Trusted Publishing
22
22
  steps:
23
- - uses: actions/checkout@v4
23
+ - uses: actions/checkout@v7
24
24
  - name: Install uv
25
- uses: astral-sh/setup-uv@v3
25
+ uses: astral-sh/setup-uv@v7
26
26
  with:
27
27
  python-version: "3.12"
28
28
  - name: Build sdist and wheel
@@ -17,9 +17,11 @@ __pycache__/
17
17
  /store.db
18
18
  /report.html
19
19
  /blame_*.json
20
+ /tournament_*.json
20
21
  /validation_report.json
21
22
  /bench_report.json
22
23
  /examples/demo_report.html
24
+ /junit.xml
23
25
 
24
26
  # Build, coverage, and tool caches (regenerated on demand)
25
27
  /dist/