simjecture 0.1.1__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 (423) hide show
  1. {simjecture-0.1.1 → simjecture-0.2.2}/.github/workflows/release.yml +21 -0
  2. {simjecture-0.1.1 → simjecture-0.2.2}/CHANGELOG.md +50 -0
  3. {simjecture-0.1.1 → simjecture-0.2.2}/CITATION.cff +2 -2
  4. {simjecture-0.1.1 → simjecture-0.2.2}/PKG-INFO +41 -2
  5. {simjecture-0.1.1 → simjecture-0.2.2}/README.md +38 -1
  6. {simjecture-0.1.1 → simjecture-0.2.2}/docs/concepts/architecture.md +38 -5
  7. {simjecture-0.1.1 → simjecture-0.2.2}/docs/concepts/evidence-and-claims.md +6 -2
  8. {simjecture-0.1.1 → simjecture-0.2.2}/docs/conf.py +1 -1
  9. {simjecture-0.1.1 → simjecture-0.2.2}/docs/getting-started/first-run.md +15 -4
  10. {simjecture-0.1.1 → simjecture-0.2.2}/docs/getting-started/installation.md +13 -2
  11. {simjecture-0.1.1 → simjecture-0.2.2}/docs/getting-started/web-interface.md +20 -3
  12. simjecture-0.2.2/docs/how-to/deepseek-harness.md +180 -0
  13. {simjecture-0.1.1 → simjecture-0.2.2}/docs/index.md +3 -0
  14. {simjecture-0.1.1 → simjecture-0.2.2}/docs/reference/cli.md +2 -1
  15. simjecture-0.2.2/integrations/dsh/README.md +137 -0
  16. simjecture-0.2.2/integrations/dsh/adjudicator.js +261 -0
  17. simjecture-0.2.2/integrations/dsh/context-elider.js +343 -0
  18. simjecture-0.2.2/integrations/dsh/cordis.patch.yml +179 -0
  19. simjecture-0.2.2/integrations/dsh/job-waiter.js +277 -0
  20. simjecture-0.2.2/integrations/dsh/package.json +40 -0
  21. simjecture-0.2.2/integrations/dsh/roles.js +714 -0
  22. simjecture-0.2.2/integrations/dsh/runner.js +355 -0
  23. {simjecture-0.1.1 → simjecture-0.2.2}/pyproject.toml +6 -1
  24. simjecture-0.2.2/skills/python-experiment/SKILL.md +61 -0
  25. simjecture-0.2.2/skills/python-experiment/manifest.json +8 -0
  26. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/__init__.py +1 -1
  27. simjecture-0.2.2/src/conjecture_solver/campaign_jobs.py +959 -0
  28. simjecture-0.2.2/src/conjecture_solver/campaign_kernel.py +2486 -0
  29. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/cli.py +42 -1
  30. simjecture-0.2.2/src/conjecture_solver/dsh_engine.py +383 -0
  31. simjecture-0.2.2/src/conjecture_solver/kernel_worker.py +345 -0
  32. simjecture-0.2.2/src/conjecture_solver/mcp_schemas.py +660 -0
  33. simjecture-0.2.2/src/conjecture_solver/mcp_server.py +1001 -0
  34. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/mvp_agent.py +232 -40
  35. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/mvp_claims.py +136 -83
  36. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/mvp_control.py +31 -5
  37. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/mvp_launch.py +111 -10
  38. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/mvp_monitor.py +182 -53
  39. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/mvp_skills.py +28 -4
  40. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/application.py +142 -1
  41. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/server.py +5 -3
  42. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/app.js +75 -9
  43. simjecture-0.2.2/tests/test_campaign_jobs.py +140 -0
  44. simjecture-0.2.2/tests/test_campaign_kernel.py +864 -0
  45. simjecture-0.2.2/tests/test_dsh_bundle.py +230 -0
  46. simjecture-0.2.2/tests/test_dsh_engine.py +205 -0
  47. simjecture-0.2.2/tests/test_mcp_server.py +624 -0
  48. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_mvp_agent.py +18 -0
  49. simjecture-0.2.2/tests/test_mvp_claims.py +83 -0
  50. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_mvp_control.py +16 -0
  51. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_mvp_monitor.py +157 -0
  52. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_mvp_status_watch.py +33 -0
  53. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_web.py +86 -1
  54. {simjecture-0.1.1 → simjecture-0.2.2}/uv.lock +596 -62
  55. simjecture-0.1.1/tests/test_mvp_claims.py +0 -38
  56. {simjecture-0.1.1 → simjecture-0.2.2}/.env.example +0 -0
  57. {simjecture-0.1.1 → simjecture-0.2.2}/.gitattributes +0 -0
  58. {simjecture-0.1.1 → simjecture-0.2.2}/.github/workflows/ci.yml +0 -0
  59. {simjecture-0.1.1 → simjecture-0.2.2}/.gitignore +0 -0
  60. {simjecture-0.1.1 → simjecture-0.2.2}/.readthedocs.yaml +0 -0
  61. {simjecture-0.1.1 → simjecture-0.2.2}/CONTRIBUTING.md +0 -0
  62. {simjecture-0.1.1 → simjecture-0.2.2}/LICENSE +0 -0
  63. {simjecture-0.1.1 → simjecture-0.2.2}/NOTICE +0 -0
  64. {simjecture-0.1.1 → simjecture-0.2.2}/SECURITY.md +0 -0
  65. {simjecture-0.1.1 → simjecture-0.2.2}/THIRD_PARTY_NOTICES.md +0 -0
  66. {simjecture-0.1.1 → simjecture-0.2.2}/capabilities/warpx-cpu-26.07.json +0 -0
  67. {simjecture-0.1.1 → simjecture-0.2.2}/capabilities/warpx-cuda-openpmd-26.07.json +0 -0
  68. {simjecture-0.1.1 → simjecture-0.2.2}/demos/README.md +0 -0
  69. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/README.md +0 -0
  70. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/campaign_instruction.txt +0 -0
  71. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/guided/anchor_operator_validation.json +0 -0
  72. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/guided/gem_anchor_validation.json +0 -0
  73. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/guided/gem_collisionless.py +0 -0
  74. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/guided/prior_campaign_0002_audit_summary.json +0 -0
  75. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/guided/prior_campaign_0003_audit_summary.json +0 -0
  76. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/guided/prior_campaign_audit_summary.json +0 -0
  77. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/guided_commission.json +0 -0
  78. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/hypothesis.txt +0 -0
  79. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/plot_results.py +0 -0
  80. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/artifact_provenance.json +0 -0
  81. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/claim_summary.md +0 -0
  82. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/guided_commissioning.json +0 -0
  83. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/hypothesis_ledger.json +0 -0
  84. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/literature_searches.json +0 -0
  85. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/mvp_manifest.json +0 -0
  86. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/mvp_report.json +0 -0
  87. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/transcript.jsonl +0 -0
  88. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000012.py +0 -0
  89. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000013.py +0 -0
  90. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000019.py +0 -0
  91. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000020.py +0 -0
  92. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000026.py +0 -0
  93. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000027.py +0 -0
  94. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000032.py +0 -0
  95. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000033.py +0 -0
  96. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000037.py +0 -0
  97. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000041.py +0 -0
  98. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000042.py +0 -0
  99. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000043.py +0 -0
  100. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/.acs/evidence_programs/iteration_000049.py +0 -0
  101. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/analyze_ensemble.py +0 -0
  102. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/analyze_manifest.json +0 -0
  103. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/commission_summary.json +0 -0
  104. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/ensemble_result.json +0 -0
  105. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/run_p16_t1_s20260902/diagnostic_overview.svg +0 -0
  106. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/run_p16_t1_s20260902/final_fields.npz +0 -0
  107. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/run_p16_t1_s20260902/warpx_used_inputs +0 -0
  108. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/run_p16_t20_s20260902/diagnostic_overview.svg +0 -0
  109. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/run_p16_t20_s20260902/final_fields.npz +0 -0
  110. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/run_p16_t20_s20260902/warpx_used_inputs +0 -0
  111. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p16_t1_s20260902_summary.json +0 -0
  112. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p16_t1_s20260903_summary.json +0 -0
  113. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p16_t1_s20260904_summary.json +0 -0
  114. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p16_t20_s20260902_summary.json +0 -0
  115. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p16_t20_s20260903_summary.json +0 -0
  116. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p16_t20_s20260904_summary.json +0 -0
  117. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p8_t1_s20260902_summary.json +0 -0
  118. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p8_t1_s20260903_summary.json +0 -0
  119. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p8_t1_s20260904_summary.json +0 -0
  120. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p8_t20_s20260902_summary.json +0 -0
  121. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p8_t20_s20260903_summary.json +0 -0
  122. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/campaign/summaries/p8_t20_s20260904_summary.json +0 -0
  123. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/design_pin.json +0 -0
  124. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/energy_reader.py +0 -0
  125. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fallback_solver_plan.json +0 -0
  126. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/commission_manifest.json +0 -0
  127. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/commission_output.json +0 -0
  128. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/commission_output_wb.json +0 -0
  129. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p16_t1_s20260902_summary.json +0 -0
  130. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p16_t1_s20260903_summary.json +0 -0
  131. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p16_t1_s20260904_summary.json +0 -0
  132. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p16_t20_s20260902_summary.json +0 -0
  133. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p16_t20_s20260903_summary.json +0 -0
  134. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p16_t20_s20260904_summary.json +0 -0
  135. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p8_t1_s20260902_summary.json +0 -0
  136. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p8_t1_s20260903_summary.json +0 -0
  137. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p8_t1_s20260904_summary.json +0 -0
  138. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p8_t20_s20260902_summary.json +0 -0
  139. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p8_t20_s20260903_summary.json +0 -0
  140. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/fixtures/inp/p8_t20_s20260904_summary.json +0 -0
  141. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/gen_fixtures.py +0 -0
  142. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/guided/anchor_operator_validation.json +0 -0
  143. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/guided/gem_anchor_validation.json +0 -0
  144. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/guided/gem_collisionless.py +0 -0
  145. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/guided/prior_campaign_0002_audit_summary.json +0 -0
  146. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/guided/prior_campaign_0003_audit_summary.json +0 -0
  147. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/record/workspace/guided/prior_campaign_audit_summary.json +0 -0
  148. {simjecture-0.1.1 → simjecture-0.2.2}/demos/collisionless_gem_reconnection/verify_record.py +0 -0
  149. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/README.md +0 -0
  150. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/capture_tui.py +0 -0
  151. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/hypothesis.txt +0 -0
  152. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/plot_results.py +0 -0
  153. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/README.md +0 -0
  154. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/artifact_provenance.json +0 -0
  155. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/claim_summary.md +0 -0
  156. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/hypothesis_ledger.json +0 -0
  157. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/mvp_manifest.json +0 -0
  158. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/mvp_report.json +0 -0
  159. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/transcript.jsonl +0 -0
  160. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/analyze_results.py +0 -0
  161. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/calc_growth.py +0 -0
  162. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/linear_stability.py +0 -0
  163. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/mode_analysis.py +0 -0
  164. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/mode_analysis_results.json +0 -0
  165. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/pick_regime.py +0 -0
  166. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/regime_candidates.json +0 -0
  167. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/result_s1.npz +0 -0
  168. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/result_s10.npz +0 -0
  169. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/result_s10_dt025.npz +0 -0
  170. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/result_s1_dt025.npz +0 -0
  171. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/root_pattern_results.json +0 -0
  172. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/root_s10_dt0p025.npz +0 -0
  173. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/root_s10_dt0p05.npz +0 -0
  174. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/root_s1_dt0p025.npz +0 -0
  175. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/root_s1_dt0p05.npz +0 -0
  176. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/simulate_gs.py +0 -0
  177. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/simulate_gs_dt025.py +0 -0
  178. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/simulate_gs_root.py +0 -0
  179. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/simulation_results.json +0 -0
  180. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/simulation_results_dt025.json +0 -0
  181. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/record/workspace/turing_diagnostic.py +0 -0
  182. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/reproduce.py +0 -0
  183. {simjecture-0.1.1 → simjecture-0.2.2}/demos/gray_scott_counterexample/verify_record.py +0 -0
  184. {simjecture-0.1.1 → simjecture-0.2.2}/docs/_static/demos/gem-ensemble-result.png +0 -0
  185. {simjecture-0.1.1 → simjecture-0.2.2}/docs/_static/demos/gem-reconnection-fields.png +0 -0
  186. {simjecture-0.1.1 → simjecture-0.2.2}/docs/_static/demos/gray-scott-completed-tui.svg +0 -0
  187. {simjecture-0.1.1 → simjecture-0.2.2}/docs/_static/demos/gray-scott-result.png +0 -0
  188. {simjecture-0.1.1 → simjecture-0.2.2}/docs/demos/collisionless-gem.md +0 -0
  189. {simjecture-0.1.1 → simjecture-0.2.2}/docs/demos/gray-scott.md +0 -0
  190. {simjecture-0.1.1 → simjecture-0.2.2}/docs/development/documentation.md +0 -0
  191. {simjecture-0.1.1 → simjecture-0.2.2}/docs/development/releasing.md +0 -0
  192. {simjecture-0.1.1 → simjecture-0.2.2}/docs/getting-started/terminal-ui.md +0 -0
  193. {simjecture-0.1.1 → simjecture-0.2.2}/docs/how-to/add-a-capability.md +0 -0
  194. {simjecture-0.1.1 → simjecture-0.2.2}/docs/how-to/deploy-runtimes.md +0 -0
  195. {simjecture-0.1.1 → simjecture-0.2.2}/docs/how-to/guided-commissioning.md +0 -0
  196. {simjecture-0.1.1 → simjecture-0.2.2}/docs/reference/repository-map.md +0 -0
  197. {simjecture-0.1.1 → simjecture-0.2.2}/docs/requirements.txt +0 -0
  198. {simjecture-0.1.1 → simjecture-0.2.2}/docs/research/limitations.md +0 -0
  199. {simjecture-0.1.1 → simjecture-0.2.2}/docs/research/next-steps.md +0 -0
  200. {simjecture-0.1.1 → simjecture-0.2.2}/docs/research/run-0004.md +0 -0
  201. {simjecture-0.1.1 → simjecture-0.2.2}/docs/research/status.md +0 -0
  202. {simjecture-0.1.1 → simjecture-0.2.2}/environments/warpx-cpu.yml +0 -0
  203. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/AIStrategyDraft.schema.json +0 -0
  204. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ActionExecution.schema.json +0 -0
  205. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ActionFailureRecord.schema.json +0 -0
  206. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/AttemptRecord.schema.json +0 -0
  207. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/BlindedSearchReport.schema.json +0 -0
  208. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/BlindedSearchRequest.schema.json +0 -0
  209. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CampaignAction.schema.json +0 -0
  210. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CampaignActionGraph.schema.json +0 -0
  211. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CampaignActionState.schema.json +0 -0
  212. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CampaignBudget.schema.json +0 -0
  213. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CampaignCheckpoint.schema.json +0 -0
  214. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CampaignState.schema.json +0 -0
  215. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CandidateEvaluation.schema.json +0 -0
  216. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CandidateResult.schema.json +0 -0
  217. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CapabilityManifest.schema.json +0 -0
  218. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/Claim.schema.json +0 -0
  219. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/CollisionalityIntervention.schema.json +0 -0
  220. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ControlDirective.schema.json +0 -0
  221. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/DecisionRecord.schema.json +0 -0
  222. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/DiscoveryPackage.schema.json +0 -0
  223. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/DispatchAttempt.schema.json +0 -0
  224. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/DomainDiagnosisSummary.schema.json +0 -0
  225. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/DomainEvolutionSummary.schema.json +0 -0
  226. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/DomainPluginMetadata.schema.json +0 -0
  227. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/DomainRunSummary.schema.json +0 -0
  228. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/DomainTemplateSummary.schema.json +0 -0
  229. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ExperimentSpec.schema.json +0 -0
  230. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ExternalReceipt.schema.json +0 -0
  231. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/FreshSeedIntervention.schema.json +0 -0
  232. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/HumanIntervention.schema.json +0 -0
  233. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/HypothesisNode.schema.json +0 -0
  234. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/KineticSufficiencyDiscoveryPackage.schema.json +0 -0
  235. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/KineticSufficiencyHypothesisInput.schema.json +0 -0
  236. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/KineticSufficiencyResult.schema.json +0 -0
  237. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/KineticSufficiencySolveResult.schema.json +0 -0
  238. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/LifecycleEvent.schema.json +0 -0
  239. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/MVPGuidedCommissioningSpec.schema.json +0 -0
  240. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/MatchedPairFormalPredicate.schema.json +0 -0
  241. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ModelCallProvenance.schema.json +0 -0
  242. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/MultiActionCampaignReport.schema.json +0 -0
  243. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/NormalizedResult.schema.json +0 -0
  244. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/NumericalAssessment.schema.json +0 -0
  245. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/NumericalDiagnostics.schema.json +0 -0
  246. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/NumericalGate.schema.json +0 -0
  247. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ObservablePrediction.schema.json +0 -0
  248. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/OutboxIntent.schema.json +0 -0
  249. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/PICCaseResult.schema.json +0 -0
  250. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/PICConfig.schema.json +0 -0
  251. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/PICConfirmationAttempt.schema.json +0 -0
  252. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/PICConfirmationDesign.schema.json +0 -0
  253. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/PICConfirmationReport.schema.json +0 -0
  254. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/PICMixtureCaseResult.schema.json +0 -0
  255. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/PICNumericalConfig.schema.json +0 -0
  256. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/PICSufficiencyResult.schema.json +0 -0
  257. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ParameterSpace.schema.json +0 -0
  258. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ParticleStatisticsIntervention.schema.json +0 -0
  259. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ProposalDraft.schema.json +0 -0
  260. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ProposalRecord.schema.json +0 -0
  261. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ProposalRequest.schema.json +0 -0
  262. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ProposalValidation.schema.json +0 -0
  263. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ProposedToolCall.schema.json +0 -0
  264. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/QualifiedWarpXCampaignPackage.schema.json +0 -0
  265. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/QualifiedWarpXInstrument.schema.json +0 -0
  266. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ReferenceQualification.schema.json +0 -0
  267. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchBudget.schema.json +0 -0
  268. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchCampaignReport.schema.json +0 -0
  269. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchConclusion.schema.json +0 -0
  270. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchDecision.schema.json +0 -0
  271. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchEvidencePolicy.schema.json +0 -0
  272. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchHypothesis.schema.json +0 -0
  273. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchObservation.schema.json +0 -0
  274. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchProblemContract.schema.json +0 -0
  275. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchRelation.schema.json +0 -0
  276. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchToolManifest.schema.json +0 -0
  277. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/ResearchToolResult.schema.json +0 -0
  278. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/RunEvidence.schema.json +0 -0
  279. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/RunPlan.schema.json +0 -0
  280. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/SearchStrategy.schema.json +0 -0
  281. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/SheetThicknessIntervention.schema.json +0 -0
  282. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/SubprocessResearchToolConfig.schema.json +0 -0
  283. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/SymmetricMixtureCandidate.schema.json +0 -0
  284. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXCalibrationPoint.schema.json +0 -0
  285. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXCaseSummary.schema.json +0 -0
  286. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXCompiledCase.schema.json +0 -0
  287. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXConfirmationAttempt.schema.json +0 -0
  288. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXConfirmationDesign.schema.json +0 -0
  289. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXConfirmationFailure.schema.json +0 -0
  290. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXConfirmationReport.schema.json +0 -0
  291. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXConfirmationResolution.schema.json +0 -0
  292. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXExecutionProfile.schema.json +0 -0
  293. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXNumericalConfig.schema.json +0 -0
  294. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXPairSummary.schema.json +0 -0
  295. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXPhysicalConfig.schema.json +0 -0
  296. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXPhysicsQualificationRecord.schema.json +0 -0
  297. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXQualificationRecord.schema.json +0 -0
  298. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/WarpXQualifiedScope.schema.json +0 -0
  299. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/mvp/MVPAgentAction.schema.json +0 -0
  300. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/mvp/MVPAgentReport.schema.json +0 -0
  301. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/mvp/MVPClaim.schema.json +0 -0
  302. {simjecture-0.1.1 → simjecture-0.2.2}/schemas/mvp/MVPClaimLedger.schema.json +0 -0
  303. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/postprocess_warpx_case.py +0 -0
  304. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/probe_provider.py +0 -0
  305. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/propose_hypothesis.py +0 -0
  306. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/propose_search_strategy.py +0 -0
  307. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/qualify_warpx.py +0 -0
  308. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/qualify_warpx_physics.py +0 -0
  309. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/run_admitted_proposal.py +0 -0
  310. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/run_blinded_search.py +0 -0
  311. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/run_qualified_warpx_campaign.py +0 -0
  312. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/run_warpx_confirmation.py +0 -0
  313. {simjecture-0.1.1 → simjecture-0.2.2}/scripts/run_warpx_pair.py +0 -0
  314. {simjecture-0.1.1 → simjecture-0.2.2}/skills/scientific-markdown/SKILL.md +0 -0
  315. {simjecture-0.1.1 → simjecture-0.2.2}/skills/scientific-markdown/agents/openai.yaml +0 -0
  316. {simjecture-0.1.1 → simjecture-0.2.2}/skills/scientific-markdown/manifest.json +0 -0
  317. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/SKILL.md +0 -0
  318. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/agents/openai.yaml +0 -0
  319. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/examples/implicit_em_smoke.py +0 -0
  320. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/examples/minimal_smoke.py +0 -0
  321. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/examples/openpmd_field_smoke.py +0 -0
  322. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/manifest.json +0 -0
  323. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/2d-xz-commissioning.md +0 -0
  324. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/cpu-launch-tuning.md +0 -0
  325. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/diagnostics.md +0 -0
  326. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/gpu-launch-tuning.md +0 -0
  327. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/local-cuda-deployment.md +0 -0
  328. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/numerical-risks.md +0 -0
  329. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/picmi-interface.md +0 -0
  330. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/resource-scaling.md +0 -0
  331. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/references/time-integration.md +0 -0
  332. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/scripts/benchmark_cpu_threads.py +0 -0
  333. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/scripts/benchmark_gpu.py +0 -0
  334. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/scripts/bootstrap_local_cuda.sh +0 -0
  335. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/scripts/probe_local_cuda.py +0 -0
  336. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/scripts/reduced_energy_budget.py +0 -0
  337. {simjecture-0.1.1 → simjecture-0.2.2}/skills/warpx/scripts/run_local_cuda.sh +0 -0
  338. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/__main__.py +0 -0
  339. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/action_handlers.py +0 -0
  340. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/adapters/__init__.py +0 -0
  341. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/adapters/base.py +0 -0
  342. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/adapters/fake.py +0 -0
  343. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/adapters/pic.py +0 -0
  344. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/adapters/warpx.py +0 -0
  345. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/autonomous_research.py +0 -0
  346. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/benchmarks/__init__.py +0 -0
  347. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/benchmarks/electrostatic_pic.py +0 -0
  348. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/benchmarks/kinetic_sufficiency.py +0 -0
  349. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/campaign.py +0 -0
  350. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/confirmation.py +0 -0
  351. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/control.py +0 -0
  352. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/deployment.py +0 -0
  353. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/discovery.py +0 -0
  354. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/domains/__init__.py +0 -0
  355. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/domains/base.py +0 -0
  356. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/domains/kinetic_sufficiency.py +0 -0
  357. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/ledger.py +0 -0
  358. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/lifecycle.py +0 -0
  359. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/literature.py +0 -0
  360. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/llm.py +0 -0
  361. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/models.py +0 -0
  362. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/mvp_guidance.py +0 -0
  363. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/orchestration.py +0 -0
  364. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/outbox.py +0 -0
  365. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/parameters.py +0 -0
  366. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/presentation.py +0 -0
  367. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/proposals.py +0 -0
  368. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/research_tools.py +0 -0
  369. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/schema_export.py +0 -0
  370. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/search.py +0 -0
  371. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/semantics.py +0 -0
  372. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/tui/__init__.py +0 -0
  373. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/tui/app.py +0 -0
  374. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/tui/claim_views.py +0 -0
  375. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/tui/screens.py +0 -0
  376. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/warpx_analysis.py +0 -0
  377. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/warpx_campaign.py +0 -0
  378. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/warpx_confirmation.py +0 -0
  379. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/__init__.py +0 -0
  380. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/index.html +0 -0
  381. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/markdown.js +0 -0
  382. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/styles.css +0 -0
  383. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/LICENSE.dagre.txt +0 -0
  384. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/LICENSE.dompurify.txt +0 -0
  385. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/LICENSE.katex.txt +0 -0
  386. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/LICENSE.marked.txt +0 -0
  387. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/README.md +0 -0
  388. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/dagre-2.0.0.min.js +0 -0
  389. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/dompurify-3.4.14.min.js +0 -0
  390. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/katex-0.18.4.min.js +0 -0
  391. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/katex-auto-render-0.18.4.min.js +0 -0
  392. {simjecture-0.1.1 → simjecture-0.2.2}/src/conjecture_solver/web/static/vendor/marked-18.0.10.umd.js +0 -0
  393. {simjecture-0.1.1 → simjecture-0.2.2}/tests/__init__.py +0 -0
  394. {simjecture-0.1.1 → simjecture-0.2.2}/tests/fixtures/fake_warpx_runner.py +0 -0
  395. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_adapter.py +0 -0
  396. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_autonomous_research.py +0 -0
  397. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_benchmark.py +0 -0
  398. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_campaign.py +0 -0
  399. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_control.py +0 -0
  400. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_deployment.py +0 -0
  401. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_domain_plugins.py +0 -0
  402. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_ledger.py +0 -0
  403. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_lifecycle.py +0 -0
  404. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_literature.py +0 -0
  405. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_llm.py +0 -0
  406. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_models.py +0 -0
  407. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_mvp_pause.py +0 -0
  408. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_orchestration.py +0 -0
  409. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_outbox.py +0 -0
  410. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_parameters.py +0 -0
  411. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_pic.py +0 -0
  412. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_proposals.py +0 -0
  413. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_recorded_demo.py +0 -0
  414. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_schema_export.py +0 -0
  415. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_search.py +0 -0
  416. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_semantics.py +0 -0
  417. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_tui.py +0 -0
  418. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_tui_claim_views.py +0 -0
  419. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_warpx.py +0 -0
  420. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_warpx_analysis.py +0 -0
  421. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_warpx_campaign.py +0 -0
  422. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_warpx_qualification.py +0 -0
  423. {simjecture-0.1.1 → simjecture-0.2.2}/tests/test_warpx_reduced_energy.py +0 -0
@@ -24,6 +24,27 @@ jobs:
24
24
  python-version: "3.12"
25
25
  - name: Install build frontend
26
26
  run: python -m pip install uv
27
+ - name: Install sandbox runtime
28
+ run: |
29
+ sudo apt-get update
30
+ sudo apt-get install --yes bubblewrap
31
+ if sysctl kernel.unprivileged_userns_clone > /dev/null 2>&1; then
32
+ sudo sysctl -w kernel.unprivileged_userns_clone=1
33
+ fi
34
+ if sysctl kernel.apparmor_restrict_unprivileged_userns > /dev/null 2>&1; then
35
+ sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
36
+ fi
37
+ bwrap --unshare-all --die-with-parent \
38
+ --ro-bind /usr /usr \
39
+ --ro-bind /lib /lib \
40
+ --ro-bind /lib64 /lib64 \
41
+ /usr/bin/true
42
+ - name: Install locked test environment
43
+ run: uv sync --frozen --extra tui
44
+ - name: Lint release source
45
+ run: uv run ruff check .
46
+ - name: Test release source
47
+ run: uv run pytest --cov=conjecture_solver --cov-report=term-missing
27
48
  - name: Require the release tag to match the package version
28
49
  run: |
29
50
  python - <<'PY'
@@ -2,6 +2,56 @@
2
2
 
3
3
  This project follows semantic versioning. Dates use ISO 8601.
4
4
 
5
+ ## Unreleased
6
+
7
+ ## 0.2.2 — 2026-08-24
8
+
9
+ - Fixed a process-lifecycle race where the supervisor that launched a short
10
+ durable job could observe the child after exit but before `Popen.poll()`
11
+ receipted it, incorrectly recording `outcome_unknown` instead of the known
12
+ terminal result.
13
+ - Made the release workflow install the sandbox runtime and locked test
14
+ environment, then run lint and the full deterministic test suite before any
15
+ distribution can be uploaded to PyPI.
16
+
17
+ ## 0.2.1 — 2026-08-23
18
+
19
+ - Extracted a model-independent campaign kernel while preserving the existing
20
+ hypothesis graph, evidence contracts, commissioning, sandbox, capability,
21
+ provenance, and claim-closure rules.
22
+ - Added a strict DeepSeek Harness profile backed by 21 native MCP scientific
23
+ tools, with generic execution and delegation surfaces disabled.
24
+ - Split the DSH reasoning loop into a persistent, compact Lead Scientist and
25
+ fresh claim-scoped Falsifier/Experimenter, Repair Scientist, and tool-free
26
+ Judge sessions. Role-specific tool filters, mutation guards, structured
27
+ handoffs, and kernel rechecks prevent a child from silently exceeding its
28
+ scientific assignment.
29
+ - Moved durable job waiting beneath the model-facing tool call. Simulations are
30
+ submitted once, read-only status checks no longer consume model turns, and
31
+ cancellation leaves the job recoverable rather than resubmitting it.
32
+ - Added one-step-delayed, model-free context elision for completed large tool
33
+ exchanges and oversized results. Deterministic receipts shrink the active
34
+ model surface while the full append-only DSH log and campaign artifacts remain
35
+ intact; semantic compaction stays at 50% for the tested DeepSeek route.
36
+ - Added an ordinary-Python experiment skill that separates `run_python` from
37
+ named capability execution, records exact JSON validation checks, and avoids
38
+ capability-only commissioning fields in NumPy/SciPy contracts.
39
+ - Clarified that `observation_sufficient` records contract compliance rather
40
+ than self-certified scientific support. Falsifier handoffs and Judge
41
+ preparation now require closure-eligible evidence before adjudication, which
42
+ prevents a sufficient verdict from being persisted against an unclosable
43
+ claim.
44
+ - Added idempotent detached simulation jobs, verified cancellation, bounded
45
+ status reports, single-writer enforcement, and authenticated worker receipts
46
+ that recover known outcomes after an MCP restart without rerunning work.
47
+ - Added a lifetime root-campaign lease, restart-discoverable jobs and budgets,
48
+ cumulative active-time accounting, and durable cancellation after supervisor
49
+ restart. Custom skill and capability discovery roots replay in workers.
50
+ - Validated the official DSH MCP client against the Python bridge and the
51
+ release-pinned CUDA WarpX/openPMD capability.
52
+ - Shipped the pinned DSH profile inside the Python wheel and added
53
+ `simjecture dsh-profile` so installed deployments can pack the exact bundle.
54
+
5
55
  ## 0.1.1 — 2026-08-22
6
56
 
7
57
  - Added a dependency-free, localhost-only browser interface with an interactive
@@ -2,8 +2,8 @@ cff-version: 1.2.0
2
2
  message: "If you use this software, please cite the exact software version and Git commit."
3
3
  title: "Simjecture"
4
4
  type: software
5
- version: 0.1.1
6
- date-released: 2026-08-22
5
+ version: 0.2.2
6
+ date-released: 2026-08-24
7
7
  abstract: >-
8
8
  An evidence-governed runtime for autonomous computational experimentation and
9
9
  falsification over hypothesis trees.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: simjecture
3
- Version: 0.1.1
3
+ Version: 0.2.2
4
4
  Summary: Evidence-governed autonomous experimentation and falsification for computational science
5
5
  Project-URL: Homepage, https://github.com/tomzhu0225/simjecture
6
6
  Project-URL: Documentation, https://github.com/tomzhu0225/simjecture/tree/main/docs
@@ -26,6 +26,8 @@ Requires-Dist: numpy<3,>=1.26
26
26
  Requires-Dist: pandas<4,>=2.2
27
27
  Requires-Dist: pydantic<3,>=2.9
28
28
  Requires-Dist: scipy<2,>=1.12
29
+ Provides-Extra: dsh
30
+ Requires-Dist: mcp<3,>=2; extra == 'dsh'
29
31
  Provides-Extra: tui
30
32
  Requires-Dist: textual<9,>=2.0; extra == 'tui'
31
33
  Description-Content-Type: text/markdown
@@ -263,7 +265,7 @@ uv run simjecture web artifacts/magnetic-mirror-mvp
263
265
  ```
264
266
 
265
267
  Run `simjecture web` without a path to discover recent campaigns or launch a
266
- new hypothesis. Version 0.1.1 binds to localhost only; `--read-only` disables
268
+ new hypothesis. The server binds to localhost only; `--read-only` disables
267
269
  all launch and process controls. Provider credentials remain in the launching
268
270
  terminal environment and are never entered into the browser.
269
271
 
@@ -281,6 +283,43 @@ diagnostic, and control claims attached to the selected hypothesis. Press `v`
281
283
  for the complete typed audit ledger; no claim or provenance record is hidden by
282
284
  the human-first projection.
283
285
 
286
+ ## DeepSeek Harness integration
287
+
288
+ The v0.2.2 integration moves the model-facing research loop to DeepSeek Harness
289
+ without moving scientific authority out of Simjecture. DSH owns the provider,
290
+ conversation, retry policy, compaction, and resumable session. A native MCP
291
+ boundary implements 21 typed endpoints. A compact persistent Lead Scientist
292
+ sees six coordination tools and delegates claim work to fresh, scoped
293
+ Falsifier/Experimenter and Repair Scientist sessions. A separate fresh,
294
+ tool-free Judge reviews surviving claims. The Python campaign kernel continues to own hypotheses,
295
+ evidence contracts, commissioning, skills, simulation capabilities, sandboxing,
296
+ provenance, and guarded claim closure. Existing WarpX CPU/CUDA capabilities use
297
+ the same kernel path. The isolated DSH profile has no interactive approval gate
298
+ around those tools; CampaignKernel's typed boundary and sandbox remain the
299
+ execution authority. Provider and model selection remain DSH configuration.
300
+ Every role handoff is verified against durable kernel state. Scientific support
301
+ is reviewed by the Judge, and only the kernel's deterministic finish gate can
302
+ write the terminal campaign report.
303
+
304
+ The browser remains the primary interface. Once the pinned DSH profile is
305
+ installed, the usual `uv run simjecture web` command launches new campaigns
306
+ through DSH; existing campaign replay is unchanged. `--engine native` retains
307
+ the built-in runner as an explicit compatibility and diagnosis path.
308
+
309
+ The integration is a small DSH profile bundle, not a second simulator stack.
310
+ Provision Simjecture and any desired runtime on the host, then follow
311
+ [the DSH deployment guide](docs/how-to/deepseek-harness.md) to install and audit
312
+ the isolated profile. `simjecture dsh-profile` locates the bundled profile from
313
+ either a checkout or an installed wheel. Long simulations return durable job
314
+ identifiers, but the DSH waiter performs lifecycle polling inside the original
315
+ tool execution instead of spending model turns on repeated status calls. An
316
+ authenticated worker receipt lets a restarted DSH/MCP client recover a known
317
+ outcome without repeating the run; an unverifiable outcome remains non-evidence.
318
+ The first snapshot after a restart reports durable job IDs and remaining action
319
+ and active-execution budgets. The resumed DSH process reopens the same stable
320
+ event-sourced session, reconciles that snapshot, and continues without hidden
321
+ process state or charging stopped-process downtime.
322
+
284
323
  ## Core safeguards
285
324
 
286
325
  - Network-isolated writable agent workspace with no provider credentials.
@@ -231,7 +231,7 @@ uv run simjecture web artifacts/magnetic-mirror-mvp
231
231
  ```
232
232
 
233
233
  Run `simjecture web` without a path to discover recent campaigns or launch a
234
- new hypothesis. Version 0.1.1 binds to localhost only; `--read-only` disables
234
+ new hypothesis. The server binds to localhost only; `--read-only` disables
235
235
  all launch and process controls. Provider credentials remain in the launching
236
236
  terminal environment and are never entered into the browser.
237
237
 
@@ -249,6 +249,43 @@ diagnostic, and control claims attached to the selected hypothesis. Press `v`
249
249
  for the complete typed audit ledger; no claim or provenance record is hidden by
250
250
  the human-first projection.
251
251
 
252
+ ## DeepSeek Harness integration
253
+
254
+ The v0.2.2 integration moves the model-facing research loop to DeepSeek Harness
255
+ without moving scientific authority out of Simjecture. DSH owns the provider,
256
+ conversation, retry policy, compaction, and resumable session. A native MCP
257
+ boundary implements 21 typed endpoints. A compact persistent Lead Scientist
258
+ sees six coordination tools and delegates claim work to fresh, scoped
259
+ Falsifier/Experimenter and Repair Scientist sessions. A separate fresh,
260
+ tool-free Judge reviews surviving claims. The Python campaign kernel continues to own hypotheses,
261
+ evidence contracts, commissioning, skills, simulation capabilities, sandboxing,
262
+ provenance, and guarded claim closure. Existing WarpX CPU/CUDA capabilities use
263
+ the same kernel path. The isolated DSH profile has no interactive approval gate
264
+ around those tools; CampaignKernel's typed boundary and sandbox remain the
265
+ execution authority. Provider and model selection remain DSH configuration.
266
+ Every role handoff is verified against durable kernel state. Scientific support
267
+ is reviewed by the Judge, and only the kernel's deterministic finish gate can
268
+ write the terminal campaign report.
269
+
270
+ The browser remains the primary interface. Once the pinned DSH profile is
271
+ installed, the usual `uv run simjecture web` command launches new campaigns
272
+ through DSH; existing campaign replay is unchanged. `--engine native` retains
273
+ the built-in runner as an explicit compatibility and diagnosis path.
274
+
275
+ The integration is a small DSH profile bundle, not a second simulator stack.
276
+ Provision Simjecture and any desired runtime on the host, then follow
277
+ [the DSH deployment guide](docs/how-to/deepseek-harness.md) to install and audit
278
+ the isolated profile. `simjecture dsh-profile` locates the bundled profile from
279
+ either a checkout or an installed wheel. Long simulations return durable job
280
+ identifiers, but the DSH waiter performs lifecycle polling inside the original
281
+ tool execution instead of spending model turns on repeated status calls. An
282
+ authenticated worker receipt lets a restarted DSH/MCP client recover a known
283
+ outcome without repeating the run; an unverifiable outcome remains non-evidence.
284
+ The first snapshot after a restart reports durable job IDs and remaining action
285
+ and active-execution budgets. The resumed DSH process reopens the same stable
286
+ event-sourced session, reconciles that snapshot, and continues without hidden
287
+ process state or charging stopped-process downtime.
288
+
252
289
  ## Core safeguards
253
290
 
254
291
  - Network-isolated writable agent workspace with no provider credentials.
@@ -8,11 +8,32 @@ The operator supplies the root hypothesis, operational instruction, resource
8
8
  limits, installed capabilities, and any guided commissioning package. These
9
9
  inputs are recorded before the agent begins.
10
10
 
11
- ## Reasoning agent
11
+ ## Reasoning harness
12
12
 
13
13
  The model decides how to operationalize the hypothesis, which diagnostics to
14
14
  write, which sub-hypotheses to register, and which admissible experiment to run
15
- next. Its output is a typed single action, not unrestricted host code execution.
15
+ next. The built-in runner and the DSH profile are interchangeable reasoning
16
+ front ends; neither is the authority for scientific state or evidence.
17
+
18
+ ## Native tool boundary
19
+
20
+ Under DeepSeek Harness, a strict MCP profile exposes only explicit Simjecture
21
+ tools. DSH owns the provider, conversation, retry policy, compaction, and model-facing
22
+ session. Generic shell, filesystem, workflow, web, and subagent tools are not
23
+ part of the scientific profile. Its approval policy is non-interactive because
24
+ CampaignKernel is the authoritative execution gate. Each tool call crosses the
25
+ kernel boundary at most once. The researcher receives one composite
26
+ adjudication tool. It freezes the current evidence case, runs a fresh tool-free
27
+ DSH child with a strict verdict schema, and commits the verdict through two raw
28
+ MCP endpoints hidden from the researcher's scoped tool view.
29
+
30
+ ## Campaign kernel
31
+
32
+ The model-independent Python kernel validates typed actions and owns the root
33
+ hypothesis, hypothesis graph, claim ledger, evidence contracts, commissioning,
34
+ skills, capability registry, provenance, and workspace policy. The legacy MVP
35
+ runner delegates to this same kernel, so changing the reasoning harness does not
36
+ create a second scientific implementation.
16
37
 
17
38
  The autonomous loop exposes three operational roles. The **Falsifier**
18
39
  commissions tools and searches for counterexamples. After a valid
@@ -21,6 +42,9 @@ bounded search finds no counterexample, an independent **Judge** sees only the
21
42
  auditable evidence package and decides whether it is sufficient or which gap
22
43
  must be tested next. Roles are explicit workflow contexts, not claims of
23
44
  different underlying model providers.
45
+ An accepted verdict does not itself end the process: guarded finalization checks
46
+ the entire scientific frontier and writes the report only when no open claim or
47
+ unrepaired counterexample remains.
24
48
 
25
49
  ## Sandbox and capabilities
26
50
 
@@ -39,9 +63,18 @@ execution.
39
63
 
40
64
  ## Durable operational state
41
65
 
42
- Model calls and simulator intents are journaled before dispatch. Content hashes,
43
- idempotency keys, cancellation records, heartbeats, and replay logic distinguish
44
- scientific failure from provider, scheduler, or process failure.
66
+ The reasoning harness retains its model session. Under DSH, a stable session ID
67
+ and event-sourced log live inside the campaign; pause, process restart, and
68
+ resume reopen that session instead of constructing a blank conversation.
69
+ Simjecture journals simulator
70
+ intents before dispatch and stores content hashes, operation identifiers,
71
+ cancellation records, process identities, and authenticated worker receipts.
72
+ Long jobs survive an MCP restart. A missing or unverifiable receipt remains an
73
+ unknown operational outcome and cannot become scientific evidence. The bounded
74
+ snapshot exposes durable jobs, operation bindings, and remaining budgets to a
75
+ fresh session. One root runner/MCP process holds the campaign ownership lease;
76
+ detached workers hold explicit active-job writer leases. Budget accounting is
77
+ cumulative active execution time, not elapsed calendar time between sessions.
45
78
 
46
79
  ## Human interfaces
47
80
 
@@ -7,8 +7,12 @@ action. The contract states what is observed, how outcomes map to dispositions,
7
7
  what uncertainty matters, what makes the observation inconclusive, and which
8
8
  exact program commands may generate evidence.
9
9
 
10
- Artifacts written while code is still being designed remain workbench records.
11
- They cannot be promoted retroactively.
10
+ Agent-authored files and artifacts written while code is still being designed
11
+ remain workbench records. They cannot be promoted retroactively. An
12
+ execution-generated artifact is only eligible after the process succeeds and,
13
+ for detached work, its authenticated job receipt is reconciled as succeeded.
14
+ Failed, cancelled, or operationally unknown jobs remain non-evidence even when
15
+ they left a plausible partial output.
12
16
 
13
17
  ## Instruments are claims too
14
18
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  project = "Simjecture"
4
4
  author = "Bowen Zhu"
5
5
  copyright = "2026, Bowen Zhu and contributors"
6
- release = "0.1.1"
6
+ release = "0.2.2"
7
7
 
8
8
  extensions = [
9
9
  "myst_parser",
@@ -13,8 +13,18 @@ uv run simjecture web demos/gray_scott_counterexample/record --read-only
13
13
  See [Recorded Gray–Scott demo](../demos/gray-scott.md) for the scientific result
14
14
  and the boundaries of that record.
15
15
 
16
- To start a new autonomous campaign, choose a bounded hypothesis whose outcome
17
- can be evaluated with ordinary Python before attaching an expensive simulator.
16
+ To start a new autonomous campaign, first install the pinned DSH profile, then
17
+ choose a bounded hypothesis whose outcome can be evaluated with ordinary Python
18
+ before attaching an expensive simulator. The primary path is the browser:
19
+
20
+ ```bash
21
+ export DEEPSEEK_API_KEY='your-process-local-key'
22
+ uv run simjecture web
23
+ ```
24
+
25
+ Enter the hypothesis in **New hypothesis** and follow the DSH activity, typed
26
+ scientific actions, simulation jobs, and hypothesis graph in one view. The
27
+ headless built-in engine remains available as a compatibility path:
18
28
 
19
29
  ```bash
20
30
  export DEEPSEEK_API_KEY='your-process-local-key'
@@ -24,8 +34,9 @@ uv run simjecture mvp \
24
34
  --output artifacts/gray-scott-first-run
25
35
  ```
26
36
 
27
- The output directory contains the immutable manifest, complete transcript,
28
- claim ledger, artifact provenance, final report, and the agent's workspace.
37
+ Both paths produce an output directory containing the immutable manifest,
38
+ complete transcript or DSH activity projection, claim ledger, artifact
39
+ provenance, final report, and the agent's workspace.
29
40
 
30
41
  Important distinctions:
31
42
 
@@ -75,14 +75,25 @@ without granting scientific-evidence status.
75
75
 
76
76
  ## Local web interface
77
77
 
78
- The browser dashboard is included with the core installation:
78
+ The browser dashboard itself is included with the core installation. Recorded
79
+ campaigns can be opened without Node.js or a model runtime:
80
+
81
+ ```bash
82
+ uv run simjecture web demos/gray_scott_counterexample/record --read-only
83
+ ```
84
+
85
+ New browser-launched campaigns use DeepSeek Harness by default. Install the
86
+ pinned DSH profile once per machine with the
87
+ [DSH deployment guide](../how-to/deepseek-harness.md), then use the same command:
79
88
 
80
89
  ```bash
81
90
  uv run simjecture web
82
91
  ```
83
92
 
84
93
  It binds only to localhost and can discover, launch, or attach to durable
85
- campaigns. See [Web interface](web-interface.md).
94
+ campaigns. `uv run simjecture web --engine native` selects the built-in
95
+ compatibility engine when DSH is intentionally unavailable. See
96
+ [Web interface](web-interface.md).
86
97
 
87
98
  ## Optional terminal dashboard (maintenance mode)
88
99
 
@@ -17,8 +17,9 @@ uv run simjecture web demos/gray_scott_counterexample/record
17
17
  ```
18
18
 
19
19
  This starts a local server at `http://127.0.0.1:8765/` and opens the default
20
- browser. Use `--no-open` to print the address without opening it, or `--port 0`
21
- to select an available local port automatically.
20
+ browser. Use `--no-open` to print the address without opening it, `--open` to
21
+ state the default explicitly, or `--port 0` to select an available local port
22
+ automatically.
22
23
 
23
24
  The interface has five connected projections:
24
25
 
@@ -132,7 +133,23 @@ uv run simjecture web --runs-root artifacts
132
133
 
133
134
  Campaigns launched in the browser use the same structured
134
135
  `operator_input/launch.json` contract as the TUI and CLI. No shell command is
135
- constructed from hypothesis text.
136
+ constructed from hypothesis text. In v0.2, new browser campaigns use the
137
+ installed DeepSeek Harness profile by default. DSH owns provider routing,
138
+ retries, conversation compaction, and the resumable model session; Simjecture
139
+ continues to own the hypothesis graph, evidence rules, sandbox, capabilities,
140
+ jobs, and durable scientific record. The DSH session is stored inside the
141
+ campaign and reopened by **Resume** rather than replaced with a blank model
142
+ conversation.
143
+
144
+ The built-in reasoning loop remains available for compatibility and diagnosis:
145
+
146
+ ```bash
147
+ uv run simjecture web --engine native
148
+ ```
149
+
150
+ Viewing and controlling an already recorded campaign does not require Node.js
151
+ or DSH. Starting a new default campaign does; follow the
152
+ [DSH deployment guide](../how-to/deepseek-harness.md) once per machine.
136
153
 
137
154
  ## Local security boundary
138
155
 
@@ -0,0 +1,180 @@
1
+ # Run a Simjecture campaign under DSH
2
+
3
+ The DSH integration is a native-tool profile plus a small resumable driver for
4
+ a durable Simjecture campaign. Version 0.2.2 uses a persistent Lead Scientist
5
+ and fresh, claim-scoped Falsifier, Repair Scientist, and tool-free Judge
6
+ sessions. Fresh workers see bounded kernel state rather than inherited chat.
7
+ The Python MCP process is the only scientific tool surface: it exposes campaign
8
+ state, claims, evidence contracts, skills, literature metadata, workspace files,
9
+ and bounded jobs. Generic shell, filesystem bypass, and unguarded `finish` tools are
10
+ disabled by the profile wherever the host DSH version supports disabling them.
11
+ The profile also sets DSH's approval policy to `never`: all remaining scientific
12
+ side effects already cross the typed CampaignKernel policy and Bubblewrap
13
+ boundary, so no second routine permission loop is inserted around MCP calls.
14
+
15
+ ## Provision the two runtimes
16
+
17
+ Provision the Python environment and any WarpX installation on the host first;
18
+ the bundle intentionally installs neither runtime. From the repository root:
19
+
20
+ ```bash
21
+ uv sync --extra dsh
22
+ source .venv/bin/activate
23
+ ```
24
+
25
+ `mcp>=2,<3` is optional. It is imported only when `simjecture-mcp` starts, so
26
+ schema and kernel-fake tests do not need the extra.
27
+
28
+ Ordinary users do not set the bridge variables themselves. The Web launcher
29
+ records the hypothesis and execution envelope first, generates a stable DSH
30
+ session identity, and supplies contained paths to the profile. The variables
31
+ below are shown only to make that process boundary auditable:
32
+
33
+ ```bash
34
+ mkdir -p runs
35
+ printf '%s\n' 'The initial scientific hypothesis goes here.' > hypothesis.txt
36
+ export SIMJECTURE_WORKSPACE="$PWD/runs"
37
+ export SIMJECTURE_CAMPAIGN="demo"
38
+ export SIMJECTURE_HYPOTHESIS_FILE="$PWD/hypothesis.txt"
39
+ export SIMJECTURE_CAPABILITIES="$PWD/capabilities"
40
+ export SIMJECTURE_SKILLS="$PWD/skills"
41
+ export SIMJECTURE_MCP_MAX_OUTPUT_CHARS=30000
42
+ export SIMJECTURE_MCP_TIMEOUT_SECONDS=600
43
+ export SIMJECTURE_DSH_SESSION_ID=simjecture-demo
44
+ export SIMJECTURE_DSH_SESSION_ROOT="$PWD/runs/demo/operator_input/dsh_sessions"
45
+ export SIMJECTURE_DSH_ACTIVITY_FILE="$PWD/runs/demo/operator_input/dsh_activity.jsonl"
46
+ export SIMJECTURE_DSH_STATE_FILE="$PWD/runs/demo/operator_input/dsh_state.json"
47
+ export SIMJECTURE_DSH_CONTROL_FILE="$PWD/runs/demo/operator_input/control.json"
48
+ ```
49
+
50
+ The bridge uses these values for the MCP child process. It never accepts a
51
+ generic shell command or a host-wide absolute workspace path from a tool call.
52
+
53
+ ## Pack and install the DSH profile
54
+
55
+ The profile bundle lives in `integrations/dsh` in a checkout and is also shipped
56
+ inside the Python wheel. Resolve, validate, and pack that copy, then install the
57
+ resulting local bundle into the isolated harness profile:
58
+
59
+ ```bash
60
+ SIMJECTURE_DSH_PROFILE="$(simjecture dsh-profile)"
61
+ npm pack "$SIMJECTURE_DSH_PROFILE" --pack-destination /tmp
62
+ dsh plugin --profile simjecture add @deepseek-ai/dsh-headless@0.1.1-rc.2
63
+ dsh plugin --profile simjecture add /tmp/simjecture-dsh-bundle-0.2.2.tgz
64
+ ```
65
+
66
+ For a checkout-only development install, use the directory directly when the
67
+ CLI supports local plugin paths:
68
+
69
+ ```bash
70
+ dsh plugin --profile simjecture add "$PWD/integrations/dsh"
71
+ ```
72
+
73
+ The bundle pins the tested DSH prerelease and MCP-client prerelease in its
74
+ `package.json`. Keep the lockfile produced by `npm pack`/the DSH plugin manager
75
+ with the deployment artifact; do not silently widen either range.
76
+
77
+ DSH `0.1.1-rc.2` requires Node.js `^22.19.0` or `>=24.0.0`. Install the DSH CLI
78
+ according to its upstream instructions and verify that `dsh` is on `PATH`
79
+ before installing this isolated profile.
80
+
81
+ ## Inspect the resolved configuration
82
+
83
+ Before starting a long campaign, ask DSH to render the merged profile. The
84
+ exact option name is `--dump-config` in the prerelease CLI:
85
+
86
+ ```bash
87
+ dsh --profile simjecture --dump-config
88
+ ```
89
+
90
+ Confirm that the native MCP client is named `simjecture`, starts
91
+ `simjecture-mcp`, carries the `SIMJECTURE_*` environment, and has
92
+ `failOnStartupError: true`. Also confirm `approval.policy: never`, the
93
+ `simjecture` permission preset (`workspace-write` plus `never`), and that the
94
+ generic tool rows are disabled. A startup or handshake failure should stop the
95
+ scientific profile rather than silently fall back to a bypass tool.
96
+
97
+ Completed large execution and workspace-write exchanges stay fully visible for
98
+ one model request. At a later step the profile may replace the balanced exchange
99
+ on the model-facing surface with a deterministic receipt containing stable
100
+ identifiers, selected status fields, sizes, and hashes. Other oversized tool
101
+ results receive deterministic head/tail pruning. Both are model-free, and all
102
+ original events remain in the append-only DSH log and Simjecture's durable
103
+ artifacts.
104
+
105
+ The tested `deepseek-official/deepseek-v4-flash` route advertises a one-million-
106
+ token context window. The Simjecture profile performs semantic compaction for
107
+ that exact route at 50% pressure and retains a 3% verbatim tail; DSH defaults
108
+ remain in force for other routes. This is a context threshold, not a campaign
109
+ token quota: scientific work continues until a durable stop condition or the
110
+ operator's wall/action budget is reached.
111
+
112
+ The bundle intentionally does not select a scientific reasoning model. Inspect
113
+ the resolved `agent-default-model` row and configure the desired provider/model
114
+ through DSH's profile settings or a later local patch.
115
+
116
+ ## Launch through the Web interface
117
+
118
+ After the profile has been installed and inspected, use the ordinary Simjecture
119
+ entry point:
120
+
121
+ ```bash
122
+ uv run simjecture web
123
+ ```
124
+
125
+ New browser campaigns use DSH by default. Recorded-run viewing needs neither
126
+ Node.js nor DSH, and `uv run simjecture web --engine native` retains the built-in
127
+ runner for compatibility and diagnosis. Pause and resume use the same Web and
128
+ CLI controls; resume opens the stable DSH session stored under
129
+ `operator_input/dsh_sessions` rather than starting an empty conversation.
130
+
131
+ The MCP server also supports a direct smoke launch when diagnosing the host:
132
+
133
+ ```bash
134
+ simjecture-mcp --workspace "$SIMJECTURE_WORKSPACE" \
135
+ --campaign "$SIMJECTURE_CAMPAIGN" \
136
+ --hypothesis-file "$SIMJECTURE_HYPOTHESIS_FILE"
137
+ ```
138
+
139
+ That command speaks MCP over stdio and expects an MCP client; it is not a
140
+ human-facing REPL. Use DSH's initialize/list-tools/call-tool trace to verify the
141
+ 21 explicit MCP endpoints before submitting work. The persistent lead sees six
142
+ tools: two durable reads, fresh falsification and repair delegation, independent
143
+ adjudication, and guarded finalization. Each worker receives a narrower tool
144
+ surface plus a claim-scoped argument guard. Raw judge prepare/commit operations
145
+ are private to the adjudication composite.
146
+
147
+ `observation_sufficient=true` means that a linked artifact satisfies its
148
+ selected prospective contract; it is not a researcher-issued support verdict.
149
+ Falsifiers may record that contract compliance but cannot close a scientific
150
+ claim as supported. The adjudication composite refuses to start a Judge without
151
+ at least one qualifying link under the selected contract, and only a sufficient
152
+ Judge verdict can pass the deterministic support gate.
153
+
154
+ Long-running actions have caller-supplied operation identifiers and return
155
+ durable jobs. Under DSH the waiter checks `job_status` below the model surface,
156
+ so one submitted run produces one terminal tool result instead of repeated
157
+ polling turns. An interrupted wait leaves the job durable and recoverable; it
158
+ never resubmits. A direct MCP client must perform these status reads itself.
159
+ Authenticated receipts let a restarted client recover known results, while
160
+ absent or invalid receipts remain `outcome_unknown`. A fresh `snapshot` includes
161
+ a bounded durable job list and remaining action/active-execution budget.
162
+ The campaign wall-time envelope charges time while its DSH researcher process
163
+ is active, including model and tool waits. The kernel additionally records
164
+ actual tool and simulation execution for durable recovery and per-command
165
+ limits. Calendar time while DSH and the MCP process are stopped is not charged.
166
+
167
+ One root MCP process owns the campaign for its lifetime. A second DSH profile or
168
+ the legacy runner fails closed instead of alternating writes through stale
169
+ in-memory ledgers. Detached simulation workers are the only exemption and use
170
+ the kernel's durable active-job lease.
171
+
172
+ ## Scientific operating rule
173
+
174
+ Register a prospective evidence contract before linking an observation. Skill
175
+ materialization, literature results, workbench jobs, and partial jobs are
176
+ guidance or process metadata, not evidence. After a meaningful falsification
177
+ search, use the isolated adjudicator instead of self-certifying support. A
178
+ rejected package returns evidence gaps; an accepted package may close the claim,
179
+ but `finalize_campaign` writes a conclusion only after the global finish gate
180
+ passes. Preserve the durable campaign directory as the hand-off artifact.
@@ -29,6 +29,8 @@ hypothesis solving or empirical closure.
29
29
  [Guided commissioning](how-to/guided-commissioning.md).
30
30
  - **Operator:** use [Deploy runtime profiles](how-to/deploy-runtimes.md) to
31
31
  provision and verify the core, WarpX CPU, or WarpX CUDA environment.
32
+ - **DSH operator:** use [Run a Simjecture campaign under DSH](how-to/deepseek-harness.md)
33
+ to install the native MCP profile and verify its tool boundary.
32
34
  - **Reviewer:** inspect [Evaluation status](research/status.md),
33
35
  the [recorded Gray–Scott demo](demos/gray-scott.md),
34
36
  the [recorded collisionless GEM demo](demos/collisionless-gem.md),
@@ -69,6 +71,7 @@ research/limitations
69
71
  how-to/guided-commissioning
70
72
  how-to/add-a-capability
71
73
  how-to/deploy-runtimes
74
+ how-to/deepseek-harness
72
75
  ```
73
76
 
74
77
  ```{toctree}
@@ -20,7 +20,8 @@ Principal command families:
20
20
  - `watch`: follow durable MVP events until a terminal report or pause;
21
21
  - `pause`: request an action-boundary pause of a verified live runner;
22
22
  - `resume`: repeat a stored launch contract for a paused or incomplete run;
23
- - `web`: local browser dashboard and reviewed campaign controls;
23
+ - `web`: local browser dashboard and reviewed campaign controls; new launches
24
+ use DSH by default, with `--engine native` as the compatibility fallback;
24
25
  - `tui`: optional interactive dashboard (`uv sync --extra tui`);
25
26
  - `benchmark`: deterministic planted scientific benchmarks;
26
27
  - `campaign`: durable bounded campaign execution;