researchloop 0.3.2__tar.gz → 0.3.3__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.
- {researchloop-0.3.2 → researchloop-0.3.3}/PKG-INFO +1 -1
- {researchloop-0.3.2 → researchloop-0.3.3}/pyproject.toml +1 -1
- researchloop-0.3.3/researchloop/__init__.py +1 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/fix_issues.md.j2 +1 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/research_sprint.md.j2 +11 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_runner.py +18 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/uv.lock +1 -1
- researchloop-0.3.2/researchloop/__init__.py +0 -1
- {researchloop-0.3.2 → researchloop-0.3.3}/.github/workflows/ci.yml +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/.github/workflows/docs.yml +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/.github/workflows/release.yml +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/.gitignore +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/CLAUDE.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/Dockerfile +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/LICENSE +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/README.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/assets/mmlu-combined.gif +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/assets/mmlu-combined.mp4 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/cli.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/configuration.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/dashboard.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/deployment.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/development.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/getting-started.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/index.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/security.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/docs/slack.md +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/mkdocs.yml +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/__main__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/cli.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/clusters/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/clusters/monitor.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/clusters/ssh.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/comms/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/comms/base.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/comms/ntfy.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/comms/router.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/comms/slack.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/core/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/core/config.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/core/credentials.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/core/models.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/core/orchestrator.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/app.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/auth.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/routes.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/base.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/login.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/loop_detail.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/loops.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/search.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/setup.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/sprint_detail.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/sprints.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/studies.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/study_detail.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/study_form.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/tweak_detail.html +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/db/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/db/database.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/db/migrations.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/db/queries.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/claude.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/job_templates/sge.sh.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/job_templates/sge_tweak.sh.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/job_templates/slurm.sh.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/job_templates/slurm_tweak.sh.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/main.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/pipeline.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/idea_generator.md.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/red_team.md.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/report.md.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/summarizer.md.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/tweak.md.j2 +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/upload.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/schedulers/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/schedulers/base.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/schedulers/local.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/schedulers/sge.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/schedulers/slurm.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/sprints/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/sprints/auto_loop.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/sprints/manager.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/studies/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/studies/manager.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/testing/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/testing/slack_mock.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop/testing/slack_simulator.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/researchloop.toml.example +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/slack-app-manifest.yml +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/conftest.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/docker/sge/Dockerfile +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/docker/sge/entrypoint.sh +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/docker/sge/mock_claude.sh +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/docker/slurm/Dockerfile +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/docker/slurm/entrypoint.sh +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/docker/slurm/mock_claude.sh +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/integration/__init__.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/integration/conftest.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/integration/test_loop_advancement.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/integration/test_loop_and_monitor.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/integration/test_sge_scheduler.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/integration/test_slurm_scheduler.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/integration/test_sprint_slurm.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/integration/test_webhook_and_refresh.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_api.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_auto_loop.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_cli.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_config.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_dashboard.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_database.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_models.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_notification.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_queries.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_schedulers.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_search.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_sge.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_slack.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_slack_events.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_slack_mock.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_slack_simulator.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_sprint_manager.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_study_manager.py +0 -0
- {researchloop-0.3.2 → researchloop-0.3.3}/tests/test_tweaks.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.3.3"
|
|
@@ -9,3 +9,4 @@ Review the file: red_team_round_{{ round_number }}.md
|
|
|
9
9
|
- Document what you changed and why in fixes_round_{{ round_number }}.md
|
|
10
10
|
- Do not break existing working functionality
|
|
11
11
|
- Update progress.md with what you're fixing and the results
|
|
12
|
+
- Run any re-training or re-evaluation commands synchronously in the foreground. NEVER pass `run_in_background: true` on a Bash tool call, and do NOT use `nohup`, `disown`, `setsid`, or `&` to detach work — this is a one-shot `claude -p` session and any orphaned subprocess will be killed when you end your turn.
|
{researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/research_sprint.md.j2
RENAMED
|
@@ -23,6 +23,17 @@ python train.py 2>&1 | tee -a output.log
|
|
|
23
23
|
|
|
24
24
|
This lets the team monitor script output remotely. Always use `tee -a` (append mode) so all runs accumulate in the same log file. Do this for every script execution, training run, or evaluation.
|
|
25
25
|
|
|
26
|
+
## Long-running commands — run synchronously, NEVER in the background
|
|
27
|
+
This sprint runs as a single one-shot `claude -p` invocation. There is no notification mechanism, no resumed turn, and no way to "wait and be notified". The moment you end your turn, the session is over and the sprint runner kills any detached subprocesses (training, evaluation, anything you started).
|
|
28
|
+
|
|
29
|
+
Rules:
|
|
30
|
+
- NEVER pass `run_in_background: true` on a Bash tool call. Always run training and evaluation in the foreground.
|
|
31
|
+
- NEVER use `nohup`, `disown`, `setsid`, `&`, `&>`, or any other shell-level backgrounding for work you care about. The orphan will be killed.
|
|
32
|
+
- If a single Bash call needs to run longer than its default timeout, raise the per-call `timeout` parameter instead of backgrounding it.
|
|
33
|
+
- The `PushNotification`, `Monitor`, `Cron*`, `Task`, `AskUserQuestion`, `EnterPlanMode`, and `EnterWorktree` tools are NOT available in this one-shot mode. Ignore them if they appear in your tool list.
|
|
34
|
+
|
|
35
|
+
Plan training as a series of synchronous foreground commands. Wait for each to finish before ending your turn.
|
|
36
|
+
|
|
26
37
|
## Progress Log
|
|
27
38
|
Maintain a file called `progress.md` in the sprint directory. Update it regularly as you work — it's how the team monitors your progress remotely. Keep it concise and current:
|
|
28
39
|
|
|
@@ -102,6 +102,24 @@ class TestRenderTemplate:
|
|
|
102
102
|
)
|
|
103
103
|
assert "progress.md" in output
|
|
104
104
|
|
|
105
|
+
def test_research_template_forbids_backgrounding(self):
|
|
106
|
+
"""claude -p is one-shot — backgrounded subprocesses get orphaned and
|
|
107
|
+
killed by the runner's pipeline-cleanup watchdog. The template must
|
|
108
|
+
tell claude not to use run_in_background or shell-level detach."""
|
|
109
|
+
output = render_template(
|
|
110
|
+
"research_sprint.md.j2",
|
|
111
|
+
study_context="Study context",
|
|
112
|
+
idea="test idea",
|
|
113
|
+
sprint_dir="/tmp/sprint",
|
|
114
|
+
)
|
|
115
|
+
assert "run_in_background" in output
|
|
116
|
+
assert "nohup" in output
|
|
117
|
+
assert "one-shot" in output
|
|
118
|
+
|
|
119
|
+
def test_fix_template_forbids_backgrounding(self):
|
|
120
|
+
output = render_template("fix_issues.md.j2", round_number=1)
|
|
121
|
+
assert "run_in_background" in output
|
|
122
|
+
|
|
105
123
|
def test_red_team_template(self):
|
|
106
124
|
output = render_template(
|
|
107
125
|
"red_team.md.j2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.3.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/sprint_detail.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/study_detail.html
RENAMED
|
File without changes
|
|
File without changes
|
{researchloop-0.3.2 → researchloop-0.3.3}/researchloop/dashboard/templates/tweak_detail.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/job_templates/slurm_tweak.sh.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{researchloop-0.3.2 → researchloop-0.3.3}/researchloop/runner/templates/idea_generator.md.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|