outerloop-science 0.3.0rc2__tar.gz → 0.4.0rc1__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 (336) hide show
  1. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/.gitignore +7 -0
  2. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/.pre-commit-config.yaml +3 -0
  3. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/CHANGELOG.md +346 -8
  4. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/CITATION.cff +2 -2
  5. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/CLAUDE.md +3 -3
  6. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/PKG-INFO +67 -67
  7. outerloop_science-0.4.0rc1/README.md +133 -0
  8. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/RELEASING.md +4 -0
  9. outerloop_science-0.4.0rc1/SECURITY.md +98 -0
  10. outerloop_science-0.4.0rc1/docs/assets/outerloop-apple-touch-icon.png +0 -0
  11. outerloop_science-0.4.0rc1/docs/assets/outerloop-favicon.png +0 -0
  12. outerloop_science-0.4.0rc1/docs/assets/outerloop-favicon.svg +11 -0
  13. outerloop_science-0.4.0rc1/docs/community.md +48 -0
  14. outerloop_science-0.4.0rc1/docs/concurrency.md +45 -0
  15. outerloop_science-0.4.0rc1/docs/contract.md +200 -0
  16. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/agent-environment.md +40 -3
  17. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/agent-protocols.md +1 -1
  18. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/agent-substrate.md +2 -2
  19. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/architecture.md +48 -34
  20. outerloop_science-0.4.0rc1/docs/design/compute-cloud.md +204 -0
  21. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/dispatcher.md +23 -20
  22. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/eval-cache.md +2 -2
  23. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/external.md +2 -2
  24. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/headline.md +4 -4
  25. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/lifecycle.md +12 -11
  26. outerloop_science-0.4.0rc1/docs/design/model-gateway.md +154 -0
  27. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/multi-cluster.md +95 -94
  28. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/orchestrator-verify.md +13 -7
  29. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/research-lines.md +7 -6
  30. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/research-loop-buildout.md +2 -2
  31. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/resident-tick.md +33 -44
  32. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/review-placement.md +10 -9
  33. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/reviewer-infra.md +4 -4
  34. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/role-cli.md +5 -3
  35. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/scaling.md +3 -3
  36. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/session-watcher.md +8 -8
  37. outerloop_science-0.4.0rc1/docs/endpoints.md +141 -0
  38. outerloop_science-0.4.0rc1/docs/getting-started.md +159 -0
  39. outerloop_science-0.4.0rc1/docs/how-it-works.md +232 -0
  40. outerloop_science-0.4.0rc1/docs/index.md +18 -0
  41. outerloop_science-0.4.0rc1/docs/install.md +214 -0
  42. outerloop_science-0.4.0rc1/docs/javascripts/figures.js +22 -0
  43. outerloop_science-0.4.0rc1/docs/messages.md +179 -0
  44. outerloop_science-0.4.0rc1/docs/operate.md +110 -0
  45. outerloop_science-0.4.0rc1/docs/reference/cli.md +251 -0
  46. outerloop_science-0.4.0rc1/docs/reference/contract.md +557 -0
  47. outerloop_science-0.4.0rc1/docs/reference/environment.md +626 -0
  48. outerloop_science-0.4.0rc1/docs/reference/inbox.md +122 -0
  49. outerloop_science-0.4.0rc1/docs/reference/syscalls.md +210 -0
  50. outerloop_science-0.4.0rc1/docs/reviewer.md +188 -0
  51. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/roadmap.md +17 -9
  52. outerloop_science-0.4.0rc1/docs/session-capture.md +82 -0
  53. outerloop_science-0.4.0rc1/docs/storage.md +214 -0
  54. outerloop_science-0.4.0rc1/docs/stylesheets/figures.css +141 -0
  55. outerloop_science-0.4.0rc1/docs/stylesheets/site.css +10 -0
  56. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/validation/author-syscalls.md +1 -1
  57. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/examples/review.yml +13 -6
  58. outerloop_science-0.4.0rc1/mkdocs.yml +135 -0
  59. outerloop_science-0.4.0rc1/overrides/.icons/bi/circle-half.svg +3 -0
  60. outerloop_science-0.4.0rc1/overrides/.icons/bi/moon.svg +3 -0
  61. outerloop_science-0.4.0rc1/overrides/.icons/bi/search.svg +3 -0
  62. outerloop_science-0.4.0rc1/overrides/.icons/bi/sun.svg +3 -0
  63. outerloop_science-0.4.0rc1/overrides/.icons/lab/github.svg +1 -0
  64. outerloop_science-0.4.0rc1/overrides/main.html +45 -0
  65. outerloop_science-0.4.0rc1/overrides/partials/logo.html +6 -0
  66. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/pyproject.toml +7 -0
  67. outerloop_science-0.4.0rc1/scripts/docs/build.sh +11 -0
  68. outerloop_science-0.4.0rc1/scripts/docs/hooks.py +163 -0
  69. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/install_bridge.sh +2 -2
  70. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/install_claude.sh +1 -1
  71. outerloop_science-0.4.0rc1/scripts/install_codex.sh +103 -0
  72. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/install_hermes.sh +4 -4
  73. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/requeue_moved_successors.sh +2 -2
  74. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/sweep_git_locks.sh +1 -1
  75. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/tick_deploy.sh +4 -1
  76. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/tick_resident.sh +1 -1
  77. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/__init__.py +1 -1
  78. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/attempt.py +440 -125
  79. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/brief.py +132 -77
  80. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/cli.py +86 -2
  81. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/climbboard.py +29 -7
  82. outerloop_science-0.4.0rc1/src/outerloop/codex_requirements.toml +3 -0
  83. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/compute.py +2 -2
  84. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/contract.py +163 -18
  85. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/disk.py +1 -1
  86. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/dispatch.py +36 -5
  87. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/github.py +197 -19
  88. outerloop_science-0.4.0rc1/src/outerloop/guidance_pack.py +63 -0
  89. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/harness.py +255 -76
  90. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/harness_cli.py +137 -15
  91. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/harness_pins.py +10 -0
  92. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/harnesses.toml +3 -2
  93. outerloop_science-0.4.0rc1/src/outerloop/hermes_capture.py +67 -0
  94. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/housekeeping.py +1 -1
  95. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/inbox.py +18 -2
  96. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/ledger_branch.py +4 -2
  97. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/ledger_events.py +6 -3
  98. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/ledger_migrate.py +3 -2
  99. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/maintain.py +1 -1
  100. outerloop_science-0.4.0rc1/src/outerloop/markers.py +38 -0
  101. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/measure.py +118 -36
  102. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/orchestrator.py +327 -57
  103. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/panel.py +12 -2
  104. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/posting.py +92 -16
  105. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/progress.py +35 -4
  106. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/review.py +31 -2
  107. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/review_agent.py +4 -2
  108. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/review_post_cli.py +15 -24
  109. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/role_runner.py +60 -0
  110. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/runstate.py +30 -6
  111. outerloop_science-0.4.0rc1/src/outerloop/session_evidence.py +521 -0
  112. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/status.py +21 -1
  113. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/steward.py +30 -5
  114. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/syscall.py +82 -14
  115. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/syscall_cli.py +99 -28
  116. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/tick.py +25 -42
  117. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/verifier.py +28 -31
  118. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/verify_agent.py +46 -2
  119. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/verify_post_cli.py +12 -19
  120. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/watcher.py +8 -0
  121. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/conftest.py +12 -0
  122. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/README.md +16 -0
  123. outerloop_science-0.4.0rc1/tests/fixtures/default_contract_head.json +28 -0
  124. outerloop_science-0.4.0rc1/tests/fixtures/dispatched_pre_gpu_identity/completed/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/command.txt +1 -0
  125. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/dispatched_pre_gpu_identity/completed/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/provenance.json +1 -1
  126. outerloop_science-0.4.0rc1/tests/fixtures/dispatched_pre_gpu_identity/completed/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/submitted +1 -0
  127. outerloop_science-0.4.0rc1/tests/fixtures/dispatched_pre_gpu_identity/inflight/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/command.txt +1 -0
  128. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/dispatched_pre_gpu_identity/inflight/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/provenance.json +1 -1
  129. outerloop_science-0.4.0rc1/tests/fixtures/dispatched_pre_gpu_identity/inflight/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/submitted +1 -0
  130. outerloop_science-0.4.0rc1/tests/fixtures/pre_contract_switches.json +51 -0
  131. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/baselines/main@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.json +1 -1
  132. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/brief.txt +1 -1
  133. outerloop_science-0.4.0rc1/tests/fixtures/rc1_v021/end-request.json +1 -0
  134. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/ended.json +1 -1
  135. outerloop_science-0.4.0rc1/tests/fixtures/rc1_v021/eval-provenance/command.txt +1 -0
  136. outerloop_science-0.4.0rc1/tests/fixtures/rc1_v021/eval-run/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/command.txt +1 -0
  137. outerloop_science-0.4.0rc1/tests/fixtures/rc1_v021/eval-run/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/submitted +1 -0
  138. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/identity.json +1 -1
  139. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/merged.json +1 -1
  140. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/open.json +1 -1
  141. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/pending/owner__repo.json +1 -1
  142. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/pending/owner__repo@agent-01.json +1 -1
  143. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/pr-states.json +1 -1
  144. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/queue.json +1 -1
  145. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/rebind.json +1 -1
  146. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/sessionless.json +1 -1
  147. outerloop_science-0.4.0rc1/tests/fixtures/session_cost_legacy.json +5 -0
  148. outerloop_science-0.4.0rc1/tests/fixtures/suite_measurement_legacy.json +1 -0
  149. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_attempt.py +704 -102
  150. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_attempt_review.py +149 -164
  151. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_bot_aliases.py +1 -1
  152. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_brief.py +13 -8
  153. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_climbboard.py +81 -110
  154. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_codex_bridge.py +3 -1
  155. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_codex_harness.py +80 -3
  156. outerloop_science-0.4.0rc1/tests/test_codex_hooks.py +276 -0
  157. outerloop_science-0.4.0rc1/tests/test_codex_host.py +232 -0
  158. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_compute.py +7 -7
  159. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_contract.py +121 -16
  160. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_contract_names.py +42 -3
  161. outerloop_science-0.4.0rc1/tests/test_contract_switches.py +790 -0
  162. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_default_claude_model.py +1 -1
  163. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_dispatch.py +45 -7
  164. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_endpoints.py +2 -0
  165. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_github.py +16 -2
  166. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_harness.py +8 -3
  167. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_harness_pins.py +142 -7
  168. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_hermes_harness.py +47 -2
  169. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_inbox.py +125 -149
  170. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_install_harness.py +8 -4
  171. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_intake.py +1 -1
  172. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_ledger_events.py +3 -1
  173. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_markers.py +8 -8
  174. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_measure.py +110 -9
  175. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_measure_and_decide.py +64 -5
  176. outerloop_science-0.4.0rc1/tests/test_operator_message.py +56 -0
  177. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_orchestrator.py +353 -362
  178. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_panel.py +11 -0
  179. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_posting.py +71 -0
  180. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_requeue_moved_successors.py +4 -4
  181. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_review_agent.py +21 -1
  182. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_role_runner.py +22 -0
  183. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_runstate.py +22 -2
  184. outerloop_science-0.4.0rc1/tests/test_session_evidence.py +690 -0
  185. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_start.py +10 -10
  186. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_status.py +12 -1
  187. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_steward.py +109 -19
  188. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_syscall.py +119 -192
  189. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_syscall_cli.py +67 -23
  190. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_tick.py +217 -190
  191. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_tick_resident.py +6 -3
  192. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_verifier.py +16 -9
  193. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_verify_agent.py +24 -0
  194. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_version.py +1 -1
  195. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_watcher.py +4 -4
  196. outerloop_science-0.4.0rc1/uv.lock +1471 -0
  197. outerloop_science-0.3.0rc2/README.md +0 -133
  198. outerloop_science-0.3.0rc2/SECURITY.md +0 -37
  199. outerloop_science-0.3.0rc2/docs/community.md +0 -54
  200. outerloop_science-0.3.0rc2/docs/compute.md +0 -26
  201. outerloop_science-0.3.0rc2/docs/contract.md +0 -40
  202. outerloop_science-0.3.0rc2/docs/endpoints.md +0 -252
  203. outerloop_science-0.3.0rc2/docs/install.md +0 -1036
  204. outerloop_science-0.3.0rc2/docs/reviewer.md +0 -54
  205. outerloop_science-0.3.0rc2/scripts/install_codex.sh +0 -104
  206. outerloop_science-0.3.0rc2/src/outerloop/markers.py +0 -48
  207. outerloop_science-0.3.0rc2/tests/fixtures/dispatched_pre_gpu_identity/completed/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/command.txt +0 -1
  208. outerloop_science-0.3.0rc2/tests/fixtures/dispatched_pre_gpu_identity/completed/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/submitted +0 -1
  209. outerloop_science-0.3.0rc2/tests/fixtures/dispatched_pre_gpu_identity/inflight/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/command.txt +0 -1
  210. outerloop_science-0.3.0rc2/tests/fixtures/dispatched_pre_gpu_identity/inflight/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/submitted +0 -1
  211. outerloop_science-0.3.0rc2/tests/fixtures/rc1_v021/end-request.json +0 -1
  212. outerloop_science-0.3.0rc2/tests/fixtures/rc1_v021/eval-provenance/command.txt +0 -1
  213. outerloop_science-0.3.0rc2/tests/fixtures/rc1_v021/eval-run/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/command.txt +0 -1
  214. outerloop_science-0.3.0rc2/tests/fixtures/rc1_v021/eval-run/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/submitted +0 -1
  215. outerloop_science-0.3.0rc2/uv.lock +0 -910
  216. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/.python-version +0 -0
  217. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/CONTRIBUTING.md +0 -0
  218. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/LICENSE +0 -0
  219. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/NOTICE +0 -0
  220. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/containers/README.md +0 -0
  221. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/containers/agent-py312.def +0 -0
  222. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/assets/icon-dark.svg +0 -0
  223. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/assets/icon-light.svg +0 -0
  224. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/assets/icon.svg +0 -0
  225. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/accelerators.md +0 -0
  226. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/base-reintegration.md +0 -0
  227. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/consolidation.md +0 -0
  228. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/github-app-auth.md +0 -0
  229. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/judge-placement.md +0 -0
  230. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/meta.md +0 -0
  231. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/onboarding.md +0 -0
  232. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/public-surface.md +0 -0
  233. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/research-loop.md +0 -0
  234. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/docs/design/roles.md +0 -0
  235. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/README.md +0 -0
  236. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/setup_branch_protection.sh +0 -0
  237. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/scripts/tick_chain.sbatch +0 -0
  238. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/__main__.py +0 -0
  239. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/appauth.py +0 -0
  240. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/appmanifest.py +0 -0
  241. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/author_overrides.py +0 -0
  242. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/bridge_install.py +0 -0
  243. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/bridge_runtime/pyproject.toml +0 -0
  244. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/bridge_runtime/uv.lock +0 -0
  245. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/codex_bridge.py +0 -0
  246. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/contract_cli.py +0 -0
  247. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/endpoint_wait.py +0 -0
  248. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/endpoints.py +0 -0
  249. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/evalcache.py +0 -0
  250. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/gpu_lanes.py +0 -0
  251. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/hermes_install.py +0 -0
  252. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/hypothesis.py +0 -0
  253. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/image.py +0 -0
  254. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/init.py +0 -0
  255. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/instance.py +0 -0
  256. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/intake.py +0 -0
  257. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/job_names.py +0 -0
  258. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/launchlog.py +0 -0
  259. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/limits.py +0 -0
  260. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/maintain_agent_cli.py +0 -0
  261. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/maintain_post_cli.py +0 -0
  262. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/operator_limits.py +0 -0
  263. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/paths.py +0 -0
  264. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/provenance.py +0 -0
  265. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/py.typed +0 -0
  266. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/rebind.py +0 -0
  267. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/review_agent_cli.py +0 -0
  268. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/review_summarize_cli.py +0 -0
  269. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/roles.py +0 -0
  270. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/rolespec.py +0 -0
  271. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/style.py +0 -0
  272. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/src/outerloop/verify_agent_cli.py +0 -0
  273. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fakes.py +0 -0
  274. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/author_route_legacy.json +0 -0
  275. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/author_route_missing_model.json +0 -0
  276. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/author_route_missing_route.json +0 -0
  277. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/base_moved_cc4e5d7.json +0 -0
  278. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/dispatched_pre_gpu_identity/completed/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/exit-code +0 -0
  279. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/dispatched_pre_gpu_identity/completed/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/job.sh +0 -0
  280. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/dispatched_pre_gpu_identity/completed/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/stdout +0 -0
  281. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/dispatched_pre_gpu_identity/identity.json +0 -0
  282. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/dispatched_pre_gpu_identity/inflight/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/job.sh +0 -0
  283. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/hermes_resume_legacy.json +0 -0
  284. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/hermes_sample_20260924.json +0 -0
  285. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/launches-before-provenance.jsonl +0 -0
  286. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/panel_wake_9ca3d7c.json +0 -0
  287. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/eval-provenance/job.sh +0 -0
  288. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/eval-run/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/exit-code +0 -0
  289. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/eval-run/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/job.sh +0 -0
  290. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/eval-run/eval-candidate-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-f69684777d523fe6502ee4ed4d09f98410a56aec/stdout +0 -0
  291. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/generate.py.txt +0 -0
  292. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/launches.jsonl +0 -0
  293. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/fixtures/rc1_v021/line.bundle +0 -0
  294. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/helpers.py +0 -0
  295. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/ledger_fake.py +0 -0
  296. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_app_permissions.py +0 -0
  297. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_appauth.py +0 -0
  298. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_appmanifest.py +0 -0
  299. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_author_overrides.py +0 -0
  300. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_bot_login.py +0 -0
  301. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_channel_dir.py +0 -0
  302. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_contract_cli.py +0 -0
  303. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_disk.py +0 -0
  304. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_endpoint_wait.py +0 -0
  305. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_evalcache.py +0 -0
  306. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_gpu_lanes.py +0 -0
  307. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_hardening.py +0 -0
  308. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_hermes_author.py +0 -0
  309. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_housekeeping.py +0 -0
  310. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_image.py +0 -0
  311. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_import.py +0 -0
  312. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_init.py +0 -0
  313. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_instance.py +0 -0
  314. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_launchlog.py +0 -0
  315. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_ledger_migrate.py +0 -0
  316. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_lifecycle_cli.py +0 -0
  317. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_limits.py +0 -0
  318. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_local_compute.py +0 -0
  319. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_maintain.py +0 -0
  320. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_messages.py +0 -0
  321. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_operator_end.py +0 -0
  322. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_operator_limits.py +0 -0
  323. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_packaging.py +0 -0
  324. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_paths.py +0 -0
  325. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_progress.py +0 -0
  326. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_rebind.py +0 -0
  327. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_review.py +0 -0
  328. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_review_agent_cli.py +0 -0
  329. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_review_hardening.py +0 -0
  330. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_review_policy.py +0 -0
  331. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_review_summarize.py +0 -0
  332. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_rolespec.py +0 -0
  333. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_sweep_git_locks.py +0 -0
  334. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_tick_chain_successors.py +0 -0
  335. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_tiers.py +0 -0
  336. {outerloop_science-0.3.0rc2 → outerloop_science-0.4.0rc1}/tests/test_verify_agent_cli.py +0 -0
@@ -5,6 +5,10 @@ __pycache__/
5
5
  dist/
6
6
  build/
7
7
 
8
+ # Docs site (scripts/docs/build.sh; dist/ is the Python build)
9
+ dist-docs/
10
+ site/
11
+
8
12
  # Environments
9
13
  .venv/
10
14
 
@@ -12,6 +16,9 @@ build/
12
16
  .pytest_cache/
13
17
  .mypy_cache/
14
18
  .ruff_cache/
19
+ .coverage
20
+ .coverage.*
21
+ htmlcov/
15
22
 
16
23
  # Agent run artifacts (transcripts contain target-repo code — never commit)
17
24
  runs/
@@ -5,6 +5,9 @@ repos:
5
5
  - id: check-added-large-files
6
6
  args: [--maxkb=500]
7
7
  - id: end-of-file-fixer
8
+ # byte-exact archived-writer fixture: save_record must round-trip it,
9
+ # and that writer emitted no trailing newline
10
+ exclude: ^tests/fixtures/author_route_legacy\.json$
8
11
  - id: trailing-whitespace
9
12
  - id: check-merge-conflict
10
13
  - id: check-yaml
@@ -8,6 +8,344 @@ Versions follow [SemVer](https://semver.org).
8
8
 
9
9
  ### Upgrading
10
10
 
11
+ Operator actions before upgrading (everything else needs no action; details
12
+ in each entry):
13
+
14
+ - Rename `autoresearch:*` labels on target repos to `outerloop:*` and update
15
+ workflow `if:` conditions that match them; old labels and comment markers
16
+ are no longer recognized.
17
+ - Change an open research-log issue's `<!-- autoresearch:research-log -->`
18
+ marker to `<!-- outerloop:research-log -->`, and finish, close, or re-mark
19
+ issues and PRs that carry other `autoresearch:` markers; otherwise the
20
+ kernel may re-post a review, re-pick a claimed issue, or open a duplicate.
21
+ - Rename the contract key `climb_job_minutes` to `attempt_job_minutes`, and
22
+ finish or rebind runs parked on a commit whose contract still uses it.
23
+ - Finish or rebind parked runs whose benchmark was renamed or removed.
24
+ - Run `outerloop harness upgrade codex` (deploys that run harness upgrades do
25
+ this automatically).
26
+ - The one-idea rule is no longer enforced; a repository that wants it writes
27
+ it into its guidance files.
28
+
29
+ What changes for runs in flight: a parked run may get one tool-update note at
30
+ its first wake; a measurement between infrastructure retries may get one extra
31
+ retry; codex costs captured before the upgrade still overstate resumed
32
+ sessions.
33
+
34
+ Before rolling back: remove `regression` blocks from contracts, drain parked
35
+ runs, and do not roll back while self-reported claims exist.
36
+
37
+ ### Documentation
38
+
39
+ - The docs site is now a manual: getting started, task guides, concept pages
40
+ with figures, and reference pages for contract fields, the operator CLI,
41
+ agent syscalls, inbox messages and environment variables.
42
+ - Tests, comments and design notes use generic cluster, partition and
43
+ hardware names (`gpu-large`, `cpu-short`, "cluster A") instead of site-specific ones.
44
+ The docs site drops its footer line.
45
+
46
+ ### Changed
47
+
48
+ - Harness upgrades kill an install only after `OUTERLOOP_HARNESS_TIMEOUT_SECONDS`
49
+ without installer output, with a one-hour overall backstop, so a slow venv
50
+ build completes instead of dying every tick. The installers now print while
51
+ they download and unpack (uv runs verbosely, curl shows progress bars, git
52
+ clone reports progress), so a healthy install never looks stalled. A busy
53
+ upgrade lock now says another upgrade is running rather than `[Errno 11]`.
54
+ Upgrading: the variable keeps its name and default but now means time since
55
+ the last output, so an install that keeps printing may run for up to an hour.
56
+
57
+ - The author verb `end` is renamed `stop` (`stop --report FILE`,
58
+ `stop --withdraw REASON`), with no alias: agents read `end` as "end this
59
+ turn" and called it when they meant to wait for results, so the refusals
60
+ it hit now each name the next step (`sleep`, `cancel`, `stop`). Upgrading:
61
+ a staged request an older kernel's CLI wrote with `"type": "end"` is
62
+ still honoured; the verb is now `stop`.
63
+
64
+ - The git safety checks now run once at each hand-off between a session and
65
+ kernel code (session start and return, wake start, panel read) instead
66
+ of on every kernel git call. Kernel git calls after a hand-off reuse its
67
+ filter-driver listing; launching untrusted code on the workspace drops
68
+ it. A workspace no hand-off covers keeps the per-call check (#512).
69
+
70
+ - The advisory-review examples and install guide track the `v0` release tag
71
+ (`@v0` with `reviewer_ref: v0`) instead of `main` or an exact release. `v0`
72
+ moves only when a final release is cut (a new `RELEASING.md` step), so
73
+ callers follow releases without hand bumps and never run the moving branch
74
+ with their reviewer key (#494).
75
+
76
+ - Research taste moved out of the kernel and into a configurable GUIDANCE
77
+ layer. Kernel agent-facing text (the author brief, the panel claim, the
78
+ verifier rubric) now carries only mechanics; a new top-level contract key
79
+ `guidance` selects the pack: `default` (the moved texts minus the
80
+ one-idea rule), `none`, or a repo-relative directory holding `author.md`
81
+ and `panel.md` (recommended location `.github/outerloop/guidance/`).
82
+ Guidance is read via git objects from the same ref as the contract
83
+ (never the working tree; a symlink blob is refused), capped at 8,000
84
+ characters per file, carried last in the author brief and in the panel
85
+ judges' prompt — outside the fence that holds the claim as untrusted
86
+ data — and labelled advisory; it may never point into `.outerloop/`.
87
+ The panel now blocks only on validity — harness
88
+ exploitation, ruler/seed fishing, data leakage, a confirmed claim-vs-evidence
89
+ contradiction, and scope and measurement facts; aggregation and landscape
90
+ live only in the pack (so `none` leaves validity criteria only), and the
91
+ taste halves of the overfitting/unsupported-claim/measurement-gap rubric
92
+ are advisory-only. Upgrading: the one-idea rule is no longer enforced
93
+ anywhere — a repository that wants it writes it into its guidance files
94
+ (the panel will not block on it); the default hypothesis, done criteria,
95
+ PR body and brief wording changed accordingly, and stored briefs from
96
+ earlier versions still load unchanged.
97
+ - A second pass moved the remaining research advice out of the kernel brief
98
+ into the default guidance pack (when to check the sibling view, budgeting
99
+ experiments against the final eval, running the repo's checks before a
100
+ submit) and deleted the divergence-debt aside from the research-line
101
+ section; under `guidance: none` the brief now states mechanics only.
102
+ ### Added
103
+
104
+ - Operator `outerloop message <run-id> (<text> | --file <path>)` to append one
105
+ note to a run's inbox, delivered at the run's next wake — no PR needed.
106
+ Reuses the existing `note`/`kernel` message shape, so older kernels read it
107
+ without a compatibility change. Upgrading: no action needed; it appends an
108
+ ordinary note from the kernel; a parked run that is not waiting on jobs wakes
109
+ at the next tick to read it, and one waiting on jobs reads it when they end.
110
+
111
+ ### Documentation
112
+
113
+ - Document `OUTERLOOP_CODEX_WEB_SEARCH` and the steward and panel judge key
114
+ files (`OUTERLOOP_STEWARD_KEY_FILE`, `OUTERLOOP_PANEL_KEY_FILE`,
115
+ `OUTERLOOP_PANEL_CODEX_KEY_FILE`, `OUTERLOOP_PANEL_HERMES_KEY_FILE`) in the
116
+ install guide, and mark the verification-loop and dispatcher design notes
117
+ as built (#337).
118
+ - `docs/design/compute-cloud.md` (#348): Slurm on a cloud as the 0.4
119
+ deployment, with operator guidance and the kernel gaps it exposed; clouds
120
+ without Slurm (git in, artifact out; a meta-provider; the run-artifact
121
+ store) as the long-term direction.
122
+ - The pages in `docs/` build into a MkDocs Material site (`mkdocs.yml`,
123
+ `scripts/docs/build.sh`), with the README and project pages as site pages
124
+ and `noindex` staging until the public launch (#523).
125
+
126
+ ### Changed
127
+
128
+ - Refreshed locked dependencies to current releases admitted by the existing
129
+ bounds: cryptography 50.0.1→50.0.2, pydantic 2.13.5→2.14.0 (pydantic-core
130
+ 2.46.5→2.50.0), mypy 2.3.1→2.4.0, ruff 0.16.6→0.17.0, and transitives;
131
+ workflows pin `astral-sh/setup-uv@v10.2.0` (#337).
132
+ - The review and verify posting CLIs now share one gate for the untrusted
133
+ emitted envelope, so a security fix to the decode/identity/kind checks lands
134
+ in both (#337). Upgrading: no action needed; envelopes already emitted keep
135
+ their shape and are read the same way, so a round started before the upgrade
136
+ posts normally.
137
+ - The `.git` guard's object read no longer derives filter-driver overrides
138
+ (`cat-file -e` never converts working-tree files), dropping one
139
+ `git config --get-regexp` subprocess from every guarded kernel git call
140
+ with no change to what is refused or neutralized (#512).
141
+ - A review round refused because the pinned harness is too old for the model,
142
+ or because the runner's harness install is missing or stale, now says which
143
+ and how to fix it instead of calling it an API outage (#475). Upgrading: no
144
+ action needed; the next skipped round names the cause, and skip comments
145
+ already posted keep their text.
146
+
147
+ ### Fixed
148
+
149
+ - A wake that upgrades the author's syscall tool now queues the "tool was
150
+ updated" note once per tool version, keyed by the installed tool's content
151
+ digest. The kernel records that digest in the run record when it installs or
152
+ refreshes the tool (a fresh climb records it without a note), so a wake under
153
+ the same kernel has nothing to announce. A wake whose recorded digest differs
154
+ appends the note before saving the new digest: an interruption between the
155
+ two re-sends at most once, and the inbox's key dedup prevents a duplicate.
156
+ Upgrading: an old `tool:` inbox key written by an earlier kernel no longer
157
+ suppresses the new note, so a parked run may see one update note at its first
158
+ wake after upgrading.
159
+ - Reserve infrastructure retries before submission so a crash before recording
160
+ the job id cannot exceed the two-retry cap; undo the reservation only on a
161
+ capacity rejection before submission. Upgrading: a measure that was between
162
+ infrastructure retries when the kernel was upgraded may get one extra retry,
163
+ once, because older journals counted failures rather than reserved retries.
164
+ - A dispatched baseline or cleanly completed eval that ends with no result is
165
+ now an infrastructure failure: two uncharged retries, then a park naming the
166
+ `infra-retries.json` an operator deletes to resume (#474). Upgrading: a
167
+ missing journal or `stage.wait_note` reads as zero retries / no note.
168
+ - A codex run that slept and resumed was priced once per leg: `exec resume`
169
+ reports the thread's cumulative token usage as each leg's usage, so
170
+ `outerloop status` overstated a resumed session's cost by roughly the
171
+ number of legs (#479). Session totals now price a codex thread once, at
172
+ its newest leg. Claude Code sessions keep summing each leg's reported
173
+ cost: cumulative resume totals arrived only in Claude Code 2.1.277, and
174
+ the CLI version that ran a session is not recorded — an author override
175
+ can pin an older CLI whose legs are per invocation — so summing, which
176
+ can overstate a resumed session on a current CLI, never undercounts one
177
+ on an older CLI.
178
+ Upgrading: index entries written before this change carry no session id
179
+ and keep contributing their recorded cost, so resumed codex sessions
180
+ captured before the upgrade still overstate; totals are accurate for
181
+ sessions captured after upgrading.
182
+ - A label-triggered review round no longer restarts the round counter at 1
183
+ after a summarizer (panel) round: both paths post as the same underlying
184
+ reviewer, so the count continues (#373). Upgrading: no action needed; round
185
+ stamps already posted are still counted, and the next round continues the
186
+ reviewer's count instead of restarting at 1.
187
+ - A manual climb now refuses a relative codex/hermes panel key path, like the
188
+ service preflight always did (#498).
189
+ - A session that ends in error while an out-of-memory kill happens in the job
190
+ ended its run with only the session's symptom; the ending now notes when an
191
+ out-of-memory kill was observed in the job during the session (#483).
192
+ Upgrading: no action needed; endings already recorded keep their text, and
193
+ only a session that ends after the upgrade carries the note.
194
+ - A model-API rate limit (HTTP 429) is now recognized as an outage in every
195
+ backend's wording, and always takes the latch's short 5-minute cooldown,
196
+ so throttled runs park briefly instead of ending aborted (#481). Upgrading:
197
+ no action needed; a latch stamped before the upgrade keeps the cooldown it
198
+ recorded (up to 45 minutes), and a throttle stamped after it takes 5 minutes.
199
+ - An author session that stops without staging anything (an empty reply after
200
+ long reasoning, or a line of narration with no command) no longer ends its
201
+ run as "ended without a submit". The kernel resumes the session with a note
202
+ that nothing ran and the run is still open, up to three times per leg. A stop
203
+ after a kernel note, a gate verdict, or with a PR open is still taken as the
204
+ agent's answer, and `stop` (formerly `end`) still ends the run. Upgrading: no action needed; a
205
+ run already ended as "ended without a submit" stays ended, and the resume
206
+ applies to a leg that stops after the upgrade.
207
+ - A Codex session that recovers from a transient error no longer ends its run
208
+ as aborted. Codex reports a dropped or timed-out model stream as an `error`
209
+ event ("Reconnecting... 1/5") and carries on; the kernel now counts an error
210
+ as fatal only when no completed turn follows it, the turn fails, or Codex
211
+ exits non-zero (#491).
212
+ - Codex installed from npm (the review workflow's install) runs through a
213
+ script launcher whose vendored binary carries its own code-mode host; the
214
+ session no longer refuses it for lacking a host beside the launcher. A
215
+ contained session refuses a launcher up front (the image has no Node.js).
216
+ - `examples/review.yml` referenced a nonexistent `@v1` tag; it now pins the
217
+ current release (`v0.3.0`, with a matching `reviewer_ref`) (#475).
218
+ - Native Codex sessions failed on the first turn because Codex 0.160's code-mode
219
+ host was not installed. The installer now installs and verifies it, and a
220
+ session refuses to start without it.
221
+ Upgrading: run `outerloop harness upgrade codex`; deploys that run harness
222
+ upgrades do this automatically. Existing single-binary installs are detected
223
+ as drift and replaced with a verified pair.
224
+
225
+ ### Changed
226
+
227
+ - A run whose benchmark is no longer in its contract (renamed or removed)
228
+ stops with one clear message naming the benchmarks the contract has,
229
+ instead of continuing on default settings (no GPU budget, default eval
230
+ walltime, research lines off). A contract that fails to load still leaves
231
+ parked runs parked until it is fixed. Upgrading: finish or rebind a parked
232
+ run before upgrading if its benchmark was renamed or removed; on its next
233
+ wake it ends aborted with a message naming the benchmarks the contract has.
234
+
235
+ ### Removed
236
+
237
+ - Upgrading: labels and comment markers are recognized only under the
238
+ `outerloop:` prefix; the retired markers are `followup`, `body-edit`,
239
+ `claimed`, `claim-released`, `withdraw`, `unmeasured-merge`,
240
+ `advisory-review`, `verification-review`, `maintenance-digest`,
241
+ `round-skipped`, `contract-alarm`, `outage-release` and `research-log`, and
242
+ the retired labels are `review`, `steward`,
243
+ `no-review` and `task`. Rename any `autoresearch:*` labels on target repos
244
+ (`gh label edit autoresearch:review --name outerloop:review`), update
245
+ workflow `if:` conditions that match the old label, and change an open
246
+ research-log issue's `<!-- autoresearch:research-log -->` marker to
247
+ `<!-- outerloop:research-log -->`, or the kernel opens a new one; on old
248
+ comments and issue or PR bodies it no longer sees the retired markers, so it
249
+ may re-post a review or addendum, re-pick an already claimed issue, or open
250
+ a duplicate digest issue — finish or close them before upgrading, or edit
251
+ the marker to `outerloop:` where the kernel must still recognize it.
252
+ - Upgrading: the contract budget key `climb_job_minutes` is no longer read,
253
+ and a contract that still uses it fails validation, so rename it to
254
+ `attempt_job_minutes` before upgrading. A wake reads both the current base
255
+ branch's contract and the contract at the commit the run was parked on, so
256
+ finish or rebind a run whose parked commit still uses the old key: it fails
257
+ on wake and stays stuck even after the branch is renamed.
258
+
259
+ ### Added
260
+
261
+ - Add optional per-benchmark `regression` allowances with a free tolerance,
262
+ exclusive hard cap, and optional measured climbed-gain requirement, in
263
+ relative or absolute units. Suite rows and reports identify the applied rule.
264
+ Upgrading: no action for existing contracts; their gate behavior and measurement
265
+ signatures are unchanged. Legacy suite rows without `rule` default to
266
+ `legacy-floor`; the new row field is additive. Contracts using the new block
267
+ require this kernel version and must remove it before rolling back.
268
+
269
+ ### Changed
270
+
271
+ - Codex sessions never get Codex's built-in sub-agent tools; multi-agent work
272
+ goes through the kernel's channels. `OUTERLOOP_CODEX_WEB_SEARCH` controls
273
+ Codex's built-in web search: `auto` (default) leaves it to Codex on native
274
+ provider sessions and turns it off on endpoint sessions, where it cannot run;
275
+ `off` turns it off everywhere. This fixes Codex sessions on chat-only
276
+ endpoints, which failed with "unsupported bridge request" after the 0.160 pin.
277
+ Upgrading: no action.
278
+ - `OUTERLOOP_TOKEN_PRICES` in the deployment `.env` now reaches ticks and the
279
+ jobs they submit, so session cost is priced from the operator table instead of
280
+ staying unknown. Upgrading: no action.
281
+ - GPU job sizing is an operator setting: `OUTERLOOP_EVAL_CPUS_PER_GPU` and
282
+ `OUTERLOOP_EVAL_MEM_GB_PER_GPU` (defaults 8 and 64) set the per-GPU core and
283
+ memory floor for GPU evals and author launches, for nodes with fewer cores or
284
+ less memory per GPU. Upgrading: no action; unset keeps the defaults.
285
+ - Apply the current contract's channel settings before wake message delivery or
286
+ workspace fetches; a run keeps the verification mode it started with, so a
287
+ contract change applies to runs that start after it. Allow measured results to
288
+ replace an earlier self-reported leader without inheriting its claimed baseline.
289
+
290
+ - Bump the pinned Codex CLI from 0.130.0 to 0.160.0 and update its Linux
291
+ archive digest. All contained Codex roles bind a kernel-owned, read-only
292
+ managed-hooks-only policy; uncontained sessions disable lifecycle hooks and
293
+ plugins (including built-in cleanup hooks) because this CLI has no per-session
294
+ requirements-file override. Rebuild user config before every launch/resume to
295
+ discard persisted hook trust, while
296
+ retaining session history. Reject the hook-trust bypass flag.
297
+ Upgrading: no manual action or run-record migration is needed; existing
298
+ session homes are sanitized automatically on their next launch. The policy
299
+ ships with the kernel and needs no image rebuild or system configuration.
300
+ - Record the Codex 0.160.0 project-config finding in `SECURITY.md`: writable
301
+ sessions auto-trust project config, so repository model settings can apply;
302
+ project provider settings are filtered. The external containment boundary
303
+ remains necessary and is unchanged.
304
+ - Retain private per-invocation session evidence: delivered prompt, bounded native
305
+ log, timestamps, identifiers, usage, and SHA-256 hashes beside existing captures.
306
+ Record missing logs and truncation without failing the author. Capture Codex and
307
+ Hermes tokens and price them with `OUTERLOOP_TOKEN_PRICES`; unpriced cost is
308
+ unknown, while explicit zero prices remain zero. Status exposes known spend
309
+ and unpriced session counts. Bound native discovery by depth, entries, and
310
+ elapsed time; withhold unresolved secret prefixes at truncation boundaries.
311
+ Incomplete Codex turn usage remains unpriced, and final-message reads refuse
312
+ symlinks at every path component and apply a byte cap. Redact provisioned
313
+ credential file contents before retention, leave failed Codex invocations
314
+ unpriced, and hash Hermes's delivered resume prompt. Cost totals persist in a
315
+ kernel-written, atomically replaced index outside the workspace and session
316
+ HOME. Separate readers and restarted kernels retain totals; any uncontained
317
+ invocation marks them unverified, also shown in status.
318
+ Upgrading: legacy sidecars are not imported into cost totals; pre-index history
319
+ has unknown coverage.
320
+ Upgrading: new session sidecars and stage usage fields are additive; older
321
+ records without them remain readable, with unknown evidence coverage and no
322
+ fabricated token backfill. Numeric legacy costs retain their meaning. New
323
+ unknown costs use JSON null; older kernels that coerce parked costs with
324
+ `float()` cannot resume those records without an update. Drain parked runs
325
+ before rolling back to such a kernel.
326
+ - Add benchmark `verification: self_report` for explicitly labelled author claims,
327
+ with required candidate and baseline values at submit, scope enforcement and
328
+ improvement floors, without evaluation or panel work. Self-reported PRs never
329
+ arm automatic merging. Add contract channel switches for sibling views,
330
+ inter-agent messages, shared reports and other agents' line branches. Defaults
331
+ retain gated verification and all sharing. Document the existing explicit
332
+ backend/model panel setting for fixed judges.
333
+ - Upgrading: run records, briefs, board rows and submission/leader ledger rows
334
+ gain optional policy or provenance fields. Missing fields retain gate mode,
335
+ enabled channels and measured provenance. Default records and rendered text
336
+ retain their previous bytes; measured ledger rows omit provenance and remain
337
+ readable by older strict readers. Default startup adds no fetch. No backfill
338
+ is needed; legacy and HEAD-output fixtures cover compatibility.
339
+ Start fresh runs for channel isolation because earlier context and Git objects
340
+ cannot be removed reliably. Keep the updated kernel while self-reported claims
341
+ exist: older strict ledger readers cannot read explicit self-reported
342
+ provenance, and older kernels cannot enforce the new contract settings.
343
+
344
+
345
+ ## [0.3.0] - 2026-10-05
346
+
347
+ ### Upgrading
348
+
11
349
  Operator actions (everything else needs no action; details in each entry):
12
350
 
13
351
  - Claude Code is pinned at 2.1.285: run `outerloop harness upgrade claude`
@@ -226,7 +564,7 @@ Operator actions (everything else needs no action; details in each entry):
226
564
  selections without changing legacy routes. New endpoint authors save
227
565
  `model[endpoint=profile]` selectors; keep those profiles until runs finish, and finish
228
566
  endpoint runs before rolling back. Hermes source/runtime must be upgraded
229
- with the harness. See [compatibility and rollback](docs/endpoints.md#upgrade-and-rollback).
567
+ with the harness. See [compatibility and rollback](docs/endpoints.md#changing-a-profile).
230
568
 
231
569
  ### Fixed
232
570
 
@@ -385,7 +723,7 @@ tasks to finish.
385
723
  - A review panel skipped at preflight or in the follow-up now sends the author a kernel note and records the reason in the submit’s PR addendum. These publishes never arm auto-merge.
386
724
 
387
725
  - A submitted review measurement could go unreported when its push failed. The number is now posted once, as soon as it is known. Review submits push a bot commit with the report’s first line and measured number as its message.
388
- - On local compute an author-sleep wake could lose an improvement: the gate answers inline there, and the wake only knew how to end a run, so the result became an aborted ending with no PR (cluster0, three runs). Fresh and resumed climbs now share one terminal: the report, the line notebook, a PR or an ending record, and the issue note. A wake that opened its PR but died before recording it reconciles to that PR instead of opening a second, and a park's snapshot is released only once the run has left waiting.
726
+ - On local compute an author-sleep wake could lose an improvement: the gate answers inline there, and the wake only knew how to end a run, so the result became an aborted ending with no PR (local mode, three runs). Fresh and resumed climbs now share one terminal: the report, the line notebook, a PR or an ending record, and the issue note. A wake that opened its PR but died before recording it reconciles to that PR instead of opening a second, and a park's snapshot is released only once the run has left waiting.
389
727
  - A research line lost its snapshot when the author's session reset its branch to main: the seal parented on main, the push was refused, and the run left no notebook entry (#368). The kernel now records the line head itself and the line only moves forward from that record. Memory files a reset dropped from the tree come back at the seal; files the session deleted on the line stay deleted.
390
728
  - Intake dropped an issue from a private org member without a word: the App's token sees such an author as CONTRIBUTOR, and only OWNER/MEMBER/COLLABORATOR qualified. Every skipped issue is now logged with its reason, a maintainer's `outerloop:task` label vouches for an issue regardless of association, and new Apps request members read so private members read as MEMBER.
391
729
 
@@ -676,7 +1014,7 @@ removes them. The full history since the first pre-release follows.
676
1014
  - GPU BENCHMARKS: a per-benchmark contract field `gpus` (default 0) sizes
677
1015
  every dispatched job of that benchmark — gate measures and author
678
1016
  launches — with `--gpus-per-node=N` on the job (the per-job `--gpus` form
679
- is rejected by Torch's submit plugin as a "CPU job" on a GPU partition —
1017
+ is rejected by the cluster's submit plugin as a "CPU job" on a GPU partition —
680
1018
  the first fleet speedrun attempt aborted on it) and `--nv` on the jail. GPU jobs go
681
1019
  to a dedicated lane (`AUTORESEARCH_GPU_PARTITION`, optional
682
1020
  `AUTORESEARCH_GPU_ACCOUNT`); a `gpus > 0` benchmark on a deployment with no
@@ -1040,7 +1378,7 @@ removes them. The full history since the first pre-release follows.
1040
1378
  - Self-deadline: climbs arm a SIGALRM at walltime-minus-margin (default
1041
1379
  120s, floor 60s, `--deadline-margin-s`) raising into the ordinary
1042
1380
  containment — the only pre-kill warning on clusters that deliver no
1043
- signals to job processes (measured on Torch 2026-08-08). The tick passes
1381
+ signals to job processes (measured on the cluster, 2026-08-08). The tick passes
1044
1382
  each climb its own walltime via `--job-minutes`.
1045
1383
 
1046
1384
  - The advisory reviewer posts one comment PER ROUND (numbered, stamped
@@ -1055,7 +1393,7 @@ removes them. The full history since the first pre-release follows.
1055
1393
  job is terminal — Slurm truth plus grace, outage never reads as dead.
1056
1394
  Previously only crashes (Python exceptions) were contained; kills
1057
1395
  stranded the record forever. A SIGTERM handler also raises into the
1058
- ordinary containment, but measurement (Torch, 2026-08-08) showed Slurm
1396
+ ordinary containment, but measurement (on the cluster, 2026-08-08) showed Slurm
1059
1397
  delivers no signal to job processes there — on such clusters the sweep
1060
1398
  and the self-deadline (below) are the real teardown paths; the handler
1061
1399
  covers direct kills and other sites.
@@ -2034,7 +2372,7 @@ removes them. The full history since the first pre-release follows.
2034
2372
  agent-01 right after its own win).
2035
2373
  - A job the site relocated off its submitted partition counts as lost only
2036
2374
  when it is also starving: eligible (dependencies done, slot passed) and not
2037
- started past the grace window. Relocation alone is routine on Torch and
2375
+ started past the grace window. Relocation alone is routine on the cluster and
2038
2376
  cancelling a relocated job only reset its queue age.
2039
2377
  - `AUTORESEARCH_BOT_ALIASES` names the kernel's former logins, and every
2040
2378
  "is this ours" check (own issues, claims, alarms, own PRs, own comments)
@@ -2139,7 +2477,7 @@ removes them. The full history since the first pre-release follows.
2139
2477
  Also fixes the sha pin itself (here and in `scripts/install_hermes.sh`):
2140
2478
  hermes v-tags are ANNOTATED, so `ls-remote` had yielded the tag OBJECT's
2141
2479
  sha — every verify comparing `rev-parse HEAD` (a commit) against it would
2142
- have always failed, stubbing out all hermes lenses and making the Torch
2480
+ have always failed, stubbing out all hermes lenses and making the cluster
2143
2481
  installer refuse. Pins are now the dereferenced `^{}` commit sha, and the
2144
2482
  installer's three paths (fresh / idempotent / tamper re-pin) were executed
2145
2483
  live against the real repo (a 222 MB clone — the cache earns its keep).
@@ -2151,7 +2489,7 @@ removes them. The full history since the first pre-release follows.
2151
2489
  that finished in minutes. The park-time afterany wake job (zero-latency
2152
2490
  primary) remains planned; the sweep stays the backup.
2153
2491
  - A genuine API refusal the Claude CLI reports as a `subtype: "success"` error
2154
- is no longer misclassified as a `session-error`. Surfaced on Torch: a session
2492
+ is no longer misclassified as a `session-error`. Surfaced on the cluster: a session
2155
2493
  hit the author key's workspace usage cap and came back `is_error` with a
2156
2494
  content-free `subtype: "success"` and the real cause only in
2157
2495
  `result="API Error: 400 ... usage limits"`. The parse stamped `"success"` into
@@ -13,5 +13,5 @@ authors:
13
13
  repository-code: "https://github.com/outerloop-science/outerloop"
14
14
  url: "https://outerloop.science"
15
15
  license: Apache-2.0
16
- version: 0.3.0rc2
17
- date-released: "2026-10-04"
16
+ version: 0.4.0rc1
17
+ date-released: "2026-10-19"
@@ -18,7 +18,7 @@ uv run pre-commit run --all-files
18
18
 
19
19
  - **The bot never merges and is never a code owner** — do not weaken this in any
20
20
  code or config change.
21
- - **autoresearch is never a target of itself**; the contract file, roadmap, and
21
+ - **outerloop is never a target of itself**; the contract file, roadmap, and
22
22
  `.github/` are forbidden write paths everywhere, regardless of contract YAML.
23
23
  - Budget caps are load-bearing safety features, not tunables to raise casually.
24
24
  - Never commit credentials, transcripts, or run artifacts (SECURITY.md).
@@ -29,7 +29,7 @@ uv run pre-commit run --all-files
29
29
  need.
30
30
  - Merge commits only; never rebase, squash, or force-push.
31
31
  - **Review until quiet**: development PRs iterate advisory-review rounds
32
- (after a fix commit, remove then re-add the `autoresearch:review` label
32
+ (after a fix commit, remove then re-add the `outerloop:review` label
33
33
  once the push settles; the authorizing round must be the most recent,
34
34
  run against the head commit). Termination is judged, not literal: code
35
35
  PRs stop when a round yields no new medium+/behavior-affecting findings;
@@ -37,7 +37,7 @@ uv run pre-commit run --all-files
37
37
  then escalate to the PI instead of cycling. Merge only on an explicit
38
38
  `ci` success AND that quiet round. Read every review before merging —
39
39
  green is not read.
40
- - Imports are absolute (`from autoresearch...`); deps go in with their code +
40
+ - Imports are absolute (`from outerloop...`); deps go in with their code +
41
41
  `uv lock`; CHANGELOG under `[Unreleased]`.
42
42
  - A PR that changes state read across kernel versions (run records, PR
43
43
  branches, ledger files, inbox messages, caches) carries a compatibility