Skip to content

fix: five independent single-site fixes — target_model on custom providers, STT error surfacing, stale cron next_run_at, browser-use PATH floor, draft-sweep age gate (#93092, #93045, #93049, #93115, #93055) - #93356

Merged
teknium1 merged 7 commits into
mainfrom
salv/small-fixes
Aug 24, 2026

Conversation

@teknium1

Copy link
Copy Markdown
Collaborator

Summary

Five independent, file-disjoint bug fixes salvaged in one sweep — each is a contributor's targeted fix for a verified bug, cherry-picked with authorship preserved.

Fixes #93092. Fixes #93045. Fixes #93049. Fixes #93115. Fixes #93055.

Changes

Validation

Suite Result
runtime_provider_resolution + transcription + cron stale-edit + browser_use_cli (pytest) 217 passed
hermes-bots hide-bot-chats (node --test) all passed, 0 fail

All five touch disjoint files; no cross-fix interaction.

Infographic

Five fixes, one sweep

web-wyf and others added 7 commits August 23, 2026 17:06
resolve_runtime_provider() documents target_model as the explicit model
override for mid-session switches and auxiliary slots, but the custom
provider path (_resolve_named_custom_runtime) never received it and
silently substituted the provider's configured default_model instead.

This made auxiliary slots such as auxiliary.background_review silently
run the provider's default model rather than the configured one — e.g. an
ocx-proxy slot configured for gemini-flash actually executed
cursor/claude-sonnet-5, hitting upstream rate limits.

Pass target_model through to the custom runtime resolver and prefer it
over the provider's default model in both the pooled and non-pooled
credential paths.
When the managed openai-audio gateway is unavailable,
_resolve_openai_audio_client_config() raises a ValueError that names the
blocker (and, for managed-Nous users, the `hermes tools` remediation).
The boolean probe in _get_provider's explicit-openai branch flattened
that into False, so the log claimed "no API key available" and the
transcription result returned the all-provider install hint -- pointing
operators at unrelated setup instead of their managed route (#93045).

Resolve the config directly in the branch so the warning names the real
blocker, and let the dispatch's "none" fallback surface the
selection-specific error for an explicit openai choice. No fallback is
added: an unavailable selection still resolves to "none", it just
reports why.
…e edits

get_due_jobs() fires purely off the stored next_run_at <= now, with no
check that the stored instant is still an occurrence of the schedule's
current expression. A direct jobs.json edit that narrows schedule.expr
(e.g. daily "0 7 * * *" -> weekdays "0 7 * * 1-5") keeps the stored
next_run_at computed under the old expression, so the job fires on days
the new expression excludes. The within-grace fire and the catch-up
"run once now" path both inherit the wrong instant.

Add a best-effort stale-schedule guard on the fire path: when the stored
next_run_at is not an occurrence of the current cron expression,
re-anchor it via compute_next_run() from the current expression and skip
the fire. Non-cron kinds, missing expr, croniter unavailability, and
malformed input all report a match so the fire path keeps its existing
semantics. Recomputation uses the current expression, so the re-anchor
converges and cannot defer a valid job forever.

Fixes #93049
…dirs

Profile-spawned workers (kanban bots, cron jobs) can inherit a PATH of
only version-manager dirs — observed in the wild as one nvm node dir
repeated 7x. The uv-installed browser-use binary is a POSIX sh
trampoline that resolves dirname/realpath through PATH, so it died
with 'realpath: not found … exec: /python: not found' (exit 127)
before its own Python ever started.

_base_subprocess_env now floors the child PATH via browser_tool's
_merge_browser_path (the agent-browser backend already guards the same
hazard), degrading to appending FHS bin dirs if that import is ever
unavailable. Windows is a no-op (.cmd shims don't trampoline).

Verified: unit tests + real uvx browser-use --version under a
nvm-only-PATH worker env, rc 127 -> rc 0.
@github-actions

github-actions Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

૮ >ﻌ< ა ci review

ran on 7714db7 — chore: add contributor email mappings for salvage

⚠️ Warnings

CI timings · View report · View job

Wall time 4m16s vs 2m39s (+61.0%). 7 job(s) slower, 4 faster, 2 unchanged.

  • JS & TS checks / JS & TS checks: +21.0s
  • OS-specific tests / Windows-only tests: +20.0s
  • Check contributors / check-attribution: +20.0s
  • OSV scan / Scan lockfiles / osv-scan: +7.0s
  • Python tests / e2e: -6.0s

OSV vulnerability scan · View job

7 known vulnerabilities found in pinned dependencies.

How to fix:

Review the findings in the Security tab. Update the affected dependencies if a patched version is available.

@alt-glitch alt-glitch added type/bug Something isn't working P2 Medium — degraded but workaround exists comp/desktop Electron desktop app (apps/desktop/*) comp/cron Cron scheduler and job management comp/cli CLI entry point, hermes_cli/, setup wizard comp/tools Tool registry, model_tools, toolsets tool/tts Text-to-speech and transcription tool/browser Browser automation (CDP, Playwright) labels Aug 24, 2026
@teknium1
teknium1 merged commit 63b42d3 into main Aug 24, 2026
37 checks passed
@teknium1
teknium1 deleted the salv/small-fixes branch August 24, 2026 01:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/cron Cron scheduler and job management comp/desktop Electron desktop app (apps/desktop/*) comp/tools Tool registry, model_tools, toolsets P2 Medium — degraded but workaround exists tool/browser Browser automation (CDP, Playwright) tool/tts Text-to-speech and transcription type/bug Something isn't working

Projects

None yet

6 participants