v0.50.270 — Bootstrap launcher import validation
Single contributor PR completing the Bug #1 family from issue #1458. v0.50.269's #1478 fixed the supervisor-respawn loop; this release fixes the start-healthy-then-cryptic-fail mode.
Highlights
Validate launcher Python can import the agent (#1315 by @ccqqlo) — pre-fix, the WebUI would start, report /health 200 OK, then 500 the first chat with a cryptic AIAgent not available error if the discovered launcher Python had yaml but not run_agent.AIAgent on its import path. New _python_can_run_webui_and_agent() helper subprocess-imports both; ensure_python_has_webui_deps() prefers the agent venv when the launcher can't import AIAgent, falls back to local venv with pip install only if needed, and raises a clear RuntimeError pointing at HERMES_WEBUI_PYTHON if no interpreter on the system can do both.
Bug #1 of #1458 is now closed across both v0.50.269 (supervisor crash loop) and v0.50.270 (start-healthy-then-cryptic-fail). Bugs #2 (state.db FD leak) and #3 (HTTP-unhealthy wedge) under #1458 remain open awaiting diagnostic data.
Maintainer-applied auto-rebase + auto-fix
Three commits absorbed into ccqqlo's branch per the May 2 2026 auto-rebase policy, all preserving attribution via Co-authored-by: ccqqlo trailers:
- Rebase compatibility (widen test stubs from #1478)
- CI fix (sidestep
venv.EnvBuilder.create()in fail-loud test) - Opus advisor follow-up (PYTHONPATH prepend documentation comment)
Test results
- pytest tests/ — 3849 passed (was 3847; +2 from #1315)
- QA harness — 20/20 passed
- CI on stage-270 — green across Python 3.11 / 3.12 / 3.13
- Opus advisor — verdict ship as-is, all 5 verification questions checked out clean
Contributors
Thanks to @ccqqlo for the focused diagnosis on this one — the "fail loudly during bootstrap instead of starting healthy and later returning AIAgent not available" framing in the original PR description was exactly the right shape.