tracefork 0.2.2__tar.gz → 0.3.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 (251) hide show
  1. tracefork-0.3.0/.github/workflows/mutation.yml +46 -0
  2. {tracefork-0.2.2 → tracefork-0.3.0}/.gitignore +1 -0
  3. {tracefork-0.2.2 → tracefork-0.3.0}/CHANGELOG.md +59 -1
  4. {tracefork-0.2.2 → tracefork-0.3.0}/CLAUDE.md +414 -23
  5. tracefork-0.3.0/PKG-INFO +306 -0
  6. tracefork-0.3.0/README.md +233 -0
  7. tracefork-0.3.0/docs/session-cross-tape-design-spike.md +149 -0
  8. {tracefork-0.2.2 → tracefork-0.3.0}/pyproject.toml +21 -1
  9. tracefork-0.3.0/scripts/mutation.sh +35 -0
  10. tracefork-0.3.0/scripts/mutation_summary.py +180 -0
  11. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/__init__.py +3 -0
  12. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/adapters/__init__.py +10 -3
  13. tracefork-0.3.0/src/tracefork/adapters/shepherd.py +267 -0
  14. tracefork-0.3.0/src/tracefork/archetypes.py +498 -0
  15. tracefork-0.3.0/src/tracefork/basis.py +122 -0
  16. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/bedrock_transport.py +3 -2
  17. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/blame.py +129 -12
  18. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/boundary_guard.py +36 -3
  19. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/checkpoint.py +53 -0
  20. tracefork-0.3.0/src/tracefork/checkpoint_stream.py +98 -0
  21. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/cli.py +1376 -42
  22. tracefork-0.3.0/src/tracefork/concurrent_validate.py +422 -0
  23. tracefork-0.3.0/src/tracefork/confinement_diagnostics.py +80 -0
  24. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/constants.py +23 -1
  25. tracefork-0.3.0/src/tracefork/convergence.py +137 -0
  26. tracefork-0.3.0/src/tracefork/corpus.py +229 -0
  27. tracefork-0.3.0/src/tracefork/cost_profile.py +157 -0
  28. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/coverage.py +3 -3
  29. tracefork-0.3.0/src/tracefork/cross_tape_blame.py +165 -0
  30. tracefork-0.3.0/src/tracefork/effects.py +279 -0
  31. tracefork-0.3.0/src/tracefork/field_oracle.py +126 -0
  32. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/fork.py +34 -0
  33. tracefork-0.3.0/src/tracefork/fork_allowlist.py +110 -0
  34. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/interop.py +48 -4
  35. tracefork-0.3.0/src/tracefork/live.py +73 -0
  36. tracefork-0.3.0/src/tracefork/locate.py +130 -0
  37. tracefork-0.3.0/src/tracefork/narrative.py +105 -0
  38. tracefork-0.3.0/src/tracefork/nondet.py +227 -0
  39. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/providers/__init__.py +8 -0
  40. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/providers/anthropic.py +12 -2
  41. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/providers/base.py +61 -2
  42. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/providers/bedrock.py +36 -10
  43. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/providers/gemini.py +35 -13
  44. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/providers/openai.py +12 -2
  45. tracefork-0.3.0/src/tracefork/query.py +241 -0
  46. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/recorder.py +32 -1
  47. tracefork-0.3.0/src/tracefork/release_receipt.py +276 -0
  48. tracefork-0.3.0/src/tracefork/repl.py +59 -0
  49. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/report.py +88 -1
  50. tracefork-0.3.0/src/tracefork/report_session.py +114 -0
  51. tracefork-0.3.0/src/tracefork/selfaudit.py +136 -0
  52. tracefork-0.3.0/src/tracefork/server.py +287 -0
  53. tracefork-0.3.0/src/tracefork/session_chaos.py +114 -0
  54. tracefork-0.3.0/src/tracefork/session_cost.py +134 -0
  55. tracefork-0.3.0/src/tracefork/session_ops.py +137 -0
  56. tracefork-0.3.0/src/tracefork/session_replay.py +133 -0
  57. tracefork-0.3.0/src/tracefork/settlement.py +228 -0
  58. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/store.py +222 -16
  59. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/tape.py +63 -14
  60. tracefork-0.3.0/src/tracefork/tapequery.py +101 -0
  61. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/transport.py +3 -3
  62. tracefork-0.3.0/tests/fixtures/fork_ui_agent.py +21 -0
  63. {tracefork-0.2.2 → tracefork-0.3.0}/tests/required_test_ids.txt +15 -0
  64. tracefork-0.3.0/tests/test_adapter_fork_blame_parity.py +167 -0
  65. tracefork-0.3.0/tests/test_adapters_shepherd.py +258 -0
  66. tracefork-0.3.0/tests/test_archetypes.py +159 -0
  67. tracefork-0.3.0/tests/test_basis.py +167 -0
  68. tracefork-0.3.0/tests/test_blame_heatmap.py +206 -0
  69. tracefork-0.3.0/tests/test_branch_queries.py +282 -0
  70. tracefork-0.3.0/tests/test_checkpoint_stream.py +179 -0
  71. tracefork-0.3.0/tests/test_cli_session_board.py +106 -0
  72. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_cli_smoke.py +55 -0
  73. tracefork-0.3.0/tests/test_concurrent_validate.py +107 -0
  74. tracefork-0.3.0/tests/test_confinement_diagnostics.py +206 -0
  75. tracefork-0.3.0/tests/test_confinement_risk.py +202 -0
  76. tracefork-0.3.0/tests/test_confinement_tier.py +333 -0
  77. tracefork-0.3.0/tests/test_convergence.py +197 -0
  78. tracefork-0.3.0/tests/test_corpus.py +304 -0
  79. tracefork-0.3.0/tests/test_cost_profile.py +179 -0
  80. tracefork-0.3.0/tests/test_cross_tape_blame.py +336 -0
  81. tracefork-0.3.0/tests/test_effects.py +229 -0
  82. tracefork-0.3.0/tests/test_field_oracle.py +159 -0
  83. tracefork-0.3.0/tests/test_fork_endpoint.py +206 -0
  84. tracefork-0.3.0/tests/test_live.py +95 -0
  85. tracefork-0.3.0/tests/test_locate.py +325 -0
  86. tracefork-0.3.0/tests/test_mutation_summary.py +202 -0
  87. tracefork-0.3.0/tests/test_narrative.py +218 -0
  88. tracefork-0.3.0/tests/test_nondet_env.py +197 -0
  89. tracefork-0.3.0/tests/test_nondet_read_file.py +189 -0
  90. tracefork-0.3.0/tests/test_otel_locate.py +88 -0
  91. tracefork-0.3.0/tests/test_property_ci_nesting.py +131 -0
  92. tracefork-0.3.0/tests/test_provider_capabilities.py +89 -0
  93. tracefork-0.3.0/tests/test_query.py +270 -0
  94. tracefork-0.3.0/tests/test_release_receipt.py +332 -0
  95. tracefork-0.3.0/tests/test_report_causal_forktree.py +193 -0
  96. tracefork-0.3.0/tests/test_report_scrubber.py +80 -0
  97. tracefork-0.3.0/tests/test_report_session.py +118 -0
  98. tracefork-0.3.0/tests/test_report_slice_vocabulary.py +189 -0
  99. tracefork-0.3.0/tests/test_runs_page.py +72 -0
  100. tracefork-0.3.0/tests/test_selfaudit.py +81 -0
  101. tracefork-0.3.0/tests/test_session_chaos.py +214 -0
  102. tracefork-0.3.0/tests/test_session_cost.py +207 -0
  103. tracefork-0.3.0/tests/test_session_replay.py +329 -0
  104. tracefork-0.3.0/tests/test_session_verbs.py +458 -0
  105. tracefork-0.3.0/tests/test_settlement.py +209 -0
  106. tracefork-0.3.0/tests/test_shapley_report_panel.py +138 -0
  107. tracefork-0.3.0/tests/test_storage_multiprocess.py +97 -0
  108. tracefork-0.3.0/tests/test_tapequery.py +161 -0
  109. tracefork-0.3.0/tests/test_url_model_detection.py +302 -0
  110. {tracefork-0.2.2 → tracefork-0.3.0}/uv.lock +157 -2
  111. {tracefork-0.2.2 → tracefork-0.3.0}/web/report.html +380 -7
  112. tracefork-0.3.0/web/runs.html +84 -0
  113. tracefork-0.3.0/web/session_report.html +198 -0
  114. tracefork-0.2.2/PKG-INFO +0 -747
  115. tracefork-0.2.2/README.md +0 -676
  116. tracefork-0.2.2/src/tracefork/nondet.py +0 -119
  117. tracefork-0.2.2/src/tracefork/server.py +0 -101
  118. {tracefork-0.2.2 → tracefork-0.3.0}/.editorconfig +0 -0
  119. {tracefork-0.2.2 → tracefork-0.3.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  120. {tracefork-0.2.2 → tracefork-0.3.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  121. {tracefork-0.2.2 → tracefork-0.3.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  122. {tracefork-0.2.2 → tracefork-0.3.0}/.github/dependabot.yml +0 -0
  123. {tracefork-0.2.2 → tracefork-0.3.0}/.github/pull_request_template.md +0 -0
  124. {tracefork-0.2.2 → tracefork-0.3.0}/.github/workflows/ci.yml +0 -0
  125. {tracefork-0.2.2 → tracefork-0.3.0}/.github/workflows/release.yml +0 -0
  126. {tracefork-0.2.2 → tracefork-0.3.0}/.pre-commit-config.yaml +0 -0
  127. {tracefork-0.2.2 → tracefork-0.3.0}/CODE_OF_CONDUCT.md +0 -0
  128. {tracefork-0.2.2 → tracefork-0.3.0}/CONTRIBUTING.md +0 -0
  129. {tracefork-0.2.2 → tracefork-0.3.0}/LICENSE +0 -0
  130. {tracefork-0.2.2 → tracefork-0.3.0}/SECURITY.md +0 -0
  131. {tracefork-0.2.2 → tracefork-0.3.0}/SPIKE0.md +0 -0
  132. {tracefork-0.2.2 → tracefork-0.3.0}/docs/demo.png +0 -0
  133. {tracefork-0.2.2 → tracefork-0.3.0}/docs/packaging-decisions.md +0 -0
  134. {tracefork-0.2.2 → tracefork-0.3.0}/docs/plugin-api.md +0 -0
  135. {tracefork-0.2.2 → tracefork-0.3.0}/examples/demo_report.py +0 -0
  136. {tracefork-0.2.2 → tracefork-0.3.0}/examples/plugin_example/README.md +0 -0
  137. {tracefork-0.2.2 → tracefork-0.3.0}/examples/plugin_example/plugin_example/__init__.py +0 -0
  138. {tracefork-0.2.2 → tracefork-0.3.0}/examples/plugin_example/plugin_example/matcher.py +0 -0
  139. {tracefork-0.2.2 → tracefork-0.3.0}/examples/plugin_example/pyproject.toml +0 -0
  140. {tracefork-0.2.2 → tracefork-0.3.0}/experiments/replay_fixtures/manifest.json +0 -0
  141. {tracefork-0.2.2 → tracefork-0.3.0}/experiments/replay_fixtures/single_turn.tape.sqlite +0 -0
  142. {tracefork-0.2.2 → tracefork-0.3.0}/experiments/replay_fixtures/two_turn.tape.sqlite +0 -0
  143. {tracefork-0.2.2 → tracefork-0.3.0}/experiments/validation_report_committed.json +0 -0
  144. {tracefork-0.2.2 → tracefork-0.3.0}/scripts/check_executed_evidence.py +0 -0
  145. {tracefork-0.2.2 → tracefork-0.3.0}/scripts/e2e.sh +0 -0
  146. {tracefork-0.2.2 → tracefork-0.3.0}/scripts/gen_replay_fixtures.py +0 -0
  147. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/adapters/adk.py +0 -0
  148. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/adapters/autogen.py +0 -0
  149. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/adapters/base.py +0 -0
  150. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/adapters/crewai.py +0 -0
  151. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/adapters/langchain.py +0 -0
  152. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/adapters/openai_agents.py +0 -0
  153. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/bench.py +0 -0
  154. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/bundle.py +0 -0
  155. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/certificate.py +0 -0
  156. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/ci_calibration.py +0 -0
  157. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/competing_faults.py +0 -0
  158. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/config.py +0 -0
  159. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/data/pricing.json +0 -0
  160. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/diff.py +0 -0
  161. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/divergence.py +0 -0
  162. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/eventstream.py +0 -0
  163. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/faults.py +0 -0
  164. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/fixtures.py +0 -0
  165. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/fsck.py +0 -0
  166. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/judge.py +0 -0
  167. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/matcher.py +0 -0
  168. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/mcp_client.py +0 -0
  169. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/observability.py +0 -0
  170. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/plugins.py +0 -0
  171. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/pricing.py +0 -0
  172. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/proxy.py +0 -0
  173. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/py.typed +0 -0
  174. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/receipt.py +0 -0
  175. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/record_mode.py +0 -0
  176. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/redact.py +0 -0
  177. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/replay.py +0 -0
  178. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/synthetic.py +0 -0
  179. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/tools.py +0 -0
  180. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/tournament.py +0 -0
  181. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/validate.py +0 -0
  182. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork/wire.py +0 -0
  183. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork_spike/__init__.py +0 -0
  184. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork_spike/__main__.py +0 -0
  185. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork_spike/agent.py +0 -0
  186. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork_spike/fake_llm.py +0 -0
  187. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork_spike/nondet.py +0 -0
  188. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork_spike/spike.py +0 -0
  189. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork_spike/tape.py +0 -0
  190. {tracefork-0.2.2 → tracefork-0.3.0}/src/tracefork_spike/transport.py +0 -0
  191. {tracefork-0.2.2 → tracefork-0.3.0}/tests/__init__.py +0 -0
  192. {tracefork-0.2.2 → tracefork-0.3.0}/tests/fakes.py +0 -0
  193. {tracefork-0.2.2 → tracefork-0.3.0}/tests/fixtures/legacy_tape_v1.blob +0 -0
  194. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_adapters_adk.py +0 -0
  195. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_adapters_autogen.py +0 -0
  196. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_adapters_base.py +0 -0
  197. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_adapters_crewai.py +0 -0
  198. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_adapters_langchain.py +0 -0
  199. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_adapters_openai_agents.py +0 -0
  200. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_bedrock_eventstream.py +0 -0
  201. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_bedrock_provider.py +0 -0
  202. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_bedrock_transport.py +0 -0
  203. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_bench.py +0 -0
  204. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_blame.py +0 -0
  205. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_boundary_guard.py +0 -0
  206. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_bundle.py +0 -0
  207. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_causal_edges.py +0 -0
  208. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_certificate.py +0 -0
  209. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_check_executed_evidence.py +0 -0
  210. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_checkpoint.py +0 -0
  211. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_ci_calibration.py +0 -0
  212. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_cli.py +0 -0
  213. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_competing_faults.py +0 -0
  214. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_concurrency.py +0 -0
  215. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_config.py +0 -0
  216. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_coverage.py +0 -0
  217. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_diff.py +0 -0
  218. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_divergence.py +0 -0
  219. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_e2e.py +0 -0
  220. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_faults.py +0 -0
  221. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_fork.py +0 -0
  222. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_fsck.py +0 -0
  223. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_gemini_provider.py +0 -0
  224. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_interop.py +0 -0
  225. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_judge.py +0 -0
  226. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_matcher.py +0 -0
  227. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_mcp_client.py +0 -0
  228. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_nondet.py +0 -0
  229. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_observability.py +0 -0
  230. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_openai_provider.py +0 -0
  231. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_plugin_example.py +0 -0
  232. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_plugins.py +0 -0
  233. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_pricing.py +0 -0
  234. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_property_matcher.py +0 -0
  235. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_property_tape.py +0 -0
  236. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_provider_faults.py +0 -0
  237. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_providers.py +0 -0
  238. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_proxy.py +0 -0
  239. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_receipt.py +0 -0
  240. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_record_mode.py +0 -0
  241. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_recorder.py +0 -0
  242. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_redact.py +0 -0
  243. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_replay.py +0 -0
  244. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_report.py +0 -0
  245. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_sessions.py +0 -0
  246. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_spike0.py +0 -0
  247. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_storage.py +0 -0
  248. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_tape.py +0 -0
  249. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_tools.py +0 -0
  250. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_tournament.py +0 -0
  251. {tracefork-0.2.2 → tracefork-0.3.0}/tests/test_transport.py +0 -0
@@ -0,0 +1,46 @@
1
+ name: Mutation testing
2
+
3
+ # Nightly, informational-only mutation-testing pass over the four
4
+ # proof-bearing modules (transport/tape/matcher/blame) via mutmut — see
5
+ # scripts/mutation_summary.py's module docstring for the full rationale.
6
+ #
7
+ # Deliberately triggers ONLY on a schedule + manual dispatch, never on
8
+ # `push`/`pull_request`: this job is structurally incapable of blocking a
9
+ # merge. `continue-on-error: true` on the job is belt-and-suspenders on top
10
+ # of that (and on top of scripts/mutation.sh / scripts/mutation_summary.py
11
+ # each already exiting 0 by design).
12
+
13
+ on:
14
+ schedule:
15
+ - cron: "0 7 * * *" # nightly, 07:00 UTC
16
+ workflow_dispatch:
17
+
18
+ jobs:
19
+ mutation:
20
+ runs-on: ubuntu-latest
21
+ continue-on-error: true
22
+ steps:
23
+ - uses: actions/checkout@v7
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v7
26
+ with:
27
+ python-version: "3.12"
28
+ - name: Install dependencies
29
+ run: uv sync --extra dev --extra mutation
30
+ - name: Seed coverage data for mutmut --use-coverage
31
+ run: uv run pytest -q --cov
32
+ - name: Run mutmut over transport/tape/matcher/blame
33
+ run: uv run mutmut run --use-coverage || true
34
+ - name: Export mutmut results as JUnit XML
35
+ run: uv run mutmut junitxml > mutmut-junit.xml
36
+ - name: Summarize mutation results
37
+ run: uv run python scripts/mutation_summary.py --junit-xml mutmut-junit.xml || true
38
+ - name: Upload mutation report
39
+ if: always()
40
+ uses: actions/upload-artifact@v4
41
+ with:
42
+ name: mutation-report
43
+ path: |
44
+ mutmut-junit.xml
45
+ .mutmut-cache
46
+ if-no-files-found: warn
@@ -36,3 +36,4 @@ docs/superpowers/
36
36
  .beads/
37
37
  planning/
38
38
  .superpowers/
39
+ blame_*.md
@@ -7,6 +7,63 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.0] - 2026-07-17
11
+
12
+ This release lands the full **P2 + P3 improvement backlog (44 items)**, completing the
13
+ roadmap whose P0 + P1 tier shipped in 0.2.2. It closes the three structural fronts that
14
+ review identified (a persistent queryable causal/branch graph, confinement of
15
+ re-executing forks, and richer time-travel query primitives) while pushing the
16
+ causal-blame crown jewel further — all as additive
17
+ modules preserving every load-bearing invariant (`Tape.digest()` byte-stability, the
18
+ offline/$0 suite, `NondetSource` as the sole nondeterminism seam, the self-contained
19
+ single-file `web/report.html`). Tape envelope advances to **v6** (an optional per-exchange
20
+ `request_urls`, metadata-only and proven excluded from `digest()`). Suite: **1306 tests
21
+ (+416)**, ruff/mypy clean, wheel + demo report verified end-to-end.
22
+
23
+ ### Added
24
+
25
+ - **Time-travel query primitives** — `tapequery.py` (`state_at`/`slice` fold-style views),
26
+ `locate.py` content-addressed value-locate receipts, `query.py`/`repl.py` a minimal query
27
+ surface + REPL, recursive fork-tree DAG queries (`store` branch descendants/ancestors/
28
+ siblings + `tracefork branch` sub-app + `GET /api/branch/{id}/related`), `narrative.py`
29
+ deterministic causal-explanation markdown, and `field_oracle.py` field-level
30
+ provenance-of-value blame (`blame --field`).
31
+ - **Forking & counterfactuals** — `convergence.py` proves two same-divergence-step branches
32
+ reconverged by per-exchange fingerprint equality (`tracefork converge`); `basis.py`
33
+ RecordBasis drift marker (tracefork version / git SHA, non-fatal warning on replay/fork);
34
+ `settlement.py` settlement-adjacent side-effect diff export (`settlement-diff`);
35
+ `effects.py` conflict-aware overlap diff for parallel/speculative branches.
36
+ - **Causal attribution & blame** — `archetypes.py` declarative fault-scenario generator,
37
+ `concurrent_validate.py` concurrent-branch (`asyncio.gather`) ground-truth fixture,
38
+ `cross_tape_blame.py` coalition blame across sub-agent tapes (`session cross-blame`),
39
+ `corpus.py` cross-tape corpus blame index (`corpus-blame`), a Clopper-Pearson ⊇
40
+ Wilson/Jeffreys/Agresti-Coull CI-nesting property test, and Slice selected/anchor/
41
+ evidence rendering vocabulary.
42
+ - **Providers & frameworks** — URL-path model detection (tape v6 `request_urls`, adapter
43
+ `detect_model` fallback, blame/interop resolution for Bedrock/Gemini), scoped
44
+ `ProviderCapabilities` manifest, `adapters/shepherd.py` (OpenAI-path interop), and a
45
+ cross-framework fork/blame parity test matrix.
46
+ - **Determinism & sandboxing** — `NondetSource` gains `read_file` (size-capped, zero-fs on
47
+ replay) and `get_env` draw kinds; confinement-risk pre-flight budget disclosure
48
+ (`BudgetGovernor.confinement_risk`, `blame --writable-root`/`--allowed-host`), confinement
49
+ tier tagging on Tape/Branch, and `confinement_diagnostics.py` divergence-style diagnostics.
50
+ - **Proof & validation rigor** — multi-process concurrent-write stress test, `selfaudit.py`
51
+ AST-level architectural self-audit, a scoped `mutmut` mutation-testing gate
52
+ (`scripts/mutation.sh` + nightly workflow, `[tool.mutmut]`), and `release_receipt.py`
53
+ aggregated (optionally HMAC-signed) verification receipt.
54
+ - **Multi-agent orchestration** — `session_cost.py` minimal-recompute fork cost model,
55
+ `session_replay.py` earliest-divergence rollup, `session_chaos.py` orchestration-scale
56
+ interleaving replay (`session chaos`), the `session` verb family (`session_ops.py`) +
57
+ cross-tape design spike, and `report_session.py`/`web/session_report.html` a multi-agent
58
+ fork-board report (`session board`).
59
+ - **Observability & UX** — timeline scrubber (play/step, timestamp-proportional ticks),
60
+ `cost_profile.py` cost/profile dashboard panel, Shapley necessity/sufficiency quadrant
61
+ badges (`report --shapley-report`), blame heatmap overlay on the fork tree, OTel exemplar
62
+ back-link (`GET /otel/{trace}/{span}` → run/step), click-to-fork inline UI
63
+ (`fork_allowlist.py`-gated `POST /api/run/{id}/fork`, $0-safe), a multi-run run-picker page
64
+ (`web/runs.html`, `GET /runs`), a live-tail checkpoint SSE endpoint (`live.py`), and the
65
+ causal fork-tree promoted to a first-class default report artifact.
66
+
10
67
  ## [0.2.2] - 2026-07-10
11
68
 
12
69
  This release lands the full **P0 + P1 improvement backlog (28 items)**: hardening
@@ -658,7 +715,8 @@ everything below is additive around it: all engine internals stay byte-stable,
658
715
  - `src/tracefork_spike/` — the original Spike 0 that de-risked bit-exact, no-key replay
659
716
  within the declared determinism boundary.
660
717
 
661
- [Unreleased]: https://github.com/pratik916/tracefork/compare/v0.2.2...HEAD
718
+ [Unreleased]: https://github.com/pratik916/tracefork/compare/v0.3.0...HEAD
719
+ [0.3.0]: https://github.com/pratik916/tracefork/compare/v0.2.2...v0.3.0
662
720
  [0.2.2]: https://github.com/pratik916/tracefork/compare/v0.2.1...v0.2.2
663
721
  [0.2.1]: https://github.com/pratik916/tracefork/compare/v0.2.0...v0.2.1
664
722
  [0.2.0]: https://github.com/pratik916/tracefork/compare/v0.1.0...v0.2.0