fix: restore bugfixes silently dropped by the v0.5.0 release commit - #306
Conversation
The v0.5.0 release commit (12d3fd8) appears to have been branched from around 2026-04-09 and squashed onto main on 05-19, so everything merged in between was reverted without any mention of it. Fixes dated 04-06 to 04-08 survive intact; almost everything from 04-10 onward is gone. Restores three correctness fixes whose removal is unambiguous, each of which maps to an issue that is currently closed but reproducible again at HEAD: - Doctor gateway probe: health.py was back to `method="HEAD"` on /models. Gateways that reject HEAD but serve GET fine report a false doctor failure (aiming-lab#292, aiming-lab#241). - SOTA hallucination (aiming-lab#238): the release restored the exact prompt line the fix removed ("State whether SOTA results exist ... and what they are"), and dropped the goal.md disclaimer. The prompt block moved from prompts.py to prompts/ml.py in the refactor, carrying the pre-fix text with it, so this reads as an artifact of the squash rather than intent. - Search plan schema variants (aiming-lab#243): _literature.py was back to `plan.get("search_strategies", [])`, so plans returned as search_phases/phases or with dict-wrapped queries silently yield no queries. aiming-lab#234's retry fix was reverted the same way; that one is already restored in PR aiming-lab#304, so it is deliberately not touched here. Deliberately NOT restored, because removal may have been intentional and that is the maintainers' call: the Gemini native adapter (aiming-lab#227, llm/gemini_adapter.py is deleted and no gemini preset remains) and the Volcengine/BytePlus presets (aiming-lab#240, merged in 84dad0a — the release's own parent — and now absent from PROVIDER_PRESETS entirely). Tests: the aiming-lab#239 tests were dropped too and are restored. Added coverage for the doctor probe. aiming-lab#243 shipped with no tests, which is a large part of why it vanished unnoticed; its parsing is inline in a heavily-coupled stage function, so it stays untested here.
|
Merged. This is the most valuable report in the queue, and the finding is confirmed independently rather than taken on trust. Verification
The three fixes this PR restores also reproduced at HEAD before merge: One merge conflict, resolved by keeping both sides
def _collect_queries(raw: Any, out: list[str]) -> None:
"""Append query strings from raw into out."""It accepts plain strings and dict-wrapped entries, ignores non-lists and junk, and all three call sites ( That also answers your note about #243 being untestable where it sat — the parsing is now a free function, so it's a one-liner to cover. Worth a follow-up. On the process pointYour closing observation is the part worth acting on, and I'd rather say so plainly than let it sit under a merged PR: five merged community PRs were reverted with no notice, and the only reason any of it surfaced is that you chased an unrelated 429 message. That's a real cost to people who contributed in good faith. The CI check you propose — fail a PR that deletes a test file it didn't add — would have caught #217, #240 and #227, and is cheap to add. Not restored, as you left themGemini native adapter (#227), Volcengine/BytePlus presets (#240), and the Post-merge: 2956 passed (baseline before this batch: 2869), no regressions. |
I went looking for the cause of one reverted fix (#234, restored in #304) and found it wasn't a one-off. The v0.5.0 release commit reverted most of a month of merged PRs.
What happened
12d3fd8("release: AutoResearchClaw v0.5.0") is a single squashed commit — 318 files, +42,268/−8,632 — sitting directly on top of84dad0a. Judging by what survived and what didn't, the v0.5.0 work was branched around 2026-04-09/10 and landed on 05-19, overwriting everything merged in between. Nothing in the commit mentions reverting anything.The date cutoff is unusually clean:
ad806b5MiniMax preset URL / from-stage28478ccMCP path traversal, dispatcher failover5dc7fccResponses API / MiniMax 404be89838HITL collab fixesafccebescripted HITL adaptere6a6dfaperf: lift regex compilation (#231)7b57457--from-stagewithout--output(#217)684ddb2Gemini native adapter (#227)8ec230dretry error tracking (#234)9f8d11ddoctor gateway probe61a92d8Volcengine/BytePlus presets (#240)28508f2SOTA hallucination (#239 / fixes #238)9f15247search plan schema variants (#243)Everything ≤04-08 survives; almost everything ≥04-10 is gone.
61a92d8is the sharpest case — it came in via84dad0a, the release commit's own parent, and was wiped by its own child.I verified each of these against HEAD rather than trusting a diff heuristic — the refactor moved
prompts.pyinto aprompts/package, so "file gone" needed checking by hand.5dc7fcclooked lost by line-matching but its content genuinely moved intoprompts/ml.py; it's fine.What this PR restores
Three correctness fixes whose removal is unambiguous, each mapping to an issue that's closed but reproducible again at HEAD:
Doctor gateway probe —
health.py:177was back tomethod="HEAD"on/models, byte-for-byte pre-fix. Gateways that reject HEAD but serve GET normally get reported as unreachable, which is what #292 and #241 were about.SOTA hallucination (#238) — this one is the clearest evidence of an accident rather than a decision. The release didn't just drop the fix, it restored the exact prompt line the fix removed:
The
goal.mddisclaimer is gone too. Notablyprompts/ml.py:182still has the anti-fabrication line from5dc7fcc(04-07) while line 186 has the pre-#239 text (04-20) — the file is a snapshot from between those two dates, which is exactly the squash artifact you'd expect.Search plan schema variants (#243) —
_literature.pywas back toplan.get("search_strategies", []), so a plan returned assearch_phases/phases, or with dict-wrapped queries, silently produces zero queries.What this PR deliberately does not restore
These may have been removed on purpose, and that's your call, not mine:
llm/gemini_adapter.pyis deleted and nogeminipreset remains. Cleanly removed, no dangling imports, so this could well be intentional.PROVIDER_PRESETSentirely (HEAD has: anthropic, deepseek, kimi-anthropic, minimax, novita, openai, openai-compatible, openrouter), andtests/test_volcano_provider.pywas deleted.e6a6dfa(perf: lift repeated regex compilations to module level #231) — the regex hoisting is undone (_helpers.py:527compiles per-call again). Perf only, and a separate concern.7b57457(fix: --from-stage without --output now finds existing run directory #217) — the fix survives, but its 212-linetests/test_from_stage_run_dir.pywas deleted, so it's now unprotected.Happy to send any of those as follow-ups if you confirm they weren't intentional.
Testing
pytest tests/→ 2799 passed, 56 skipped (2797 on main + the 2 tests added here).#239's tests were dropped by the release too, so they're restored: the
test_rc_prompts.pyguard, and thetest_rc_executor.pyassertion that had to change becausegoal.mdnow leads with the disclaimer. I added a probe-method test for the doctor fix. I checked the new tests actually fail against un-restored source rather than passing vacuously:#243 has no test and I didn't add one. Its parsing sits inline in
_execute_search_strategy, which needs run-dir artifacts, adapters and an LLM path to drive, so any test I wrote would be mostly mock scaffolding. Worth noting the original also shipped without tests — which is a large part of why it disappeared unnoticed for three months. If you want it covered, extracting the plan-parsing into a helper would make it a one-liner to test; happy to do that separately.Worth considering
The single most useful change here isn't in the diff: whatever produced
12d3fd8should rebase rather than squash onto main, or at minimum diff againstmainbefore landing. Five merged community PRs were reverted with no notice, and the only reason any of it surfaced is that I chased an unrelated 429 error message. I'd suggest a CI check that fails when a PR deletes a test file it didn't add — that alone would have caught #217, #240 and #227.I'd also hold off closing #238, #241, #292 and #243 as fixed until this (or an equivalent) lands, since all four currently reproduce on main.