Skip to content

Promote v0.37.0 to production - #1209

Merged
mrubens merged 28 commits into
mainfrom
release/v0.37.0
Aug 10, 2026
Merged

Promote v0.37.0 to production#1209
mrubens merged 28 commits into
mainfrom
release/v0.37.0

Conversation

@mrubens

@mrubens mrubens commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Promote v0.37.0

Frozen at 3bac4b319d3927bd9b73122fcc1802eb1d88a685 — the commit where 0.37.0 was versioned. Commits merged to develop afterward require an explicit candidate refresh or ship in the next release.

  • Merge this PR with a merge commit (do not squash or rebase).
  • If multiple promote PRs are open, merge them in version order (oldest first).
  • Merging publishes a GitHub Release for v0.37.0 and triggers the existing GHCR v* image publish (latest channel).
  • The release/v0.37.0 branch can be deleted after this PR merges.

Changelog

0.37.0 (2026-08-10)

This release brings voice-driven work to every chat provider, expands organization-wide automations and source-control identity support, and improves task reliability.

Highlights

  • Start tasks and send follow-ups with audio or voice messages across Slack, Discord, Telegram, and Microsoft Teams.
  • Run custom automations across every active repository while routing suggested follow-up tasks to the correct environment.
  • Show verified linked identities and privacy-safe attribution across GitLab, Gitea, Bitbucket, and Azure DevOps.
  • Keep long-running tasks, pull-request reviews, authenticated previews, and chat auto-start flows working more reliably.

Minor changes

  • Run custom automations across all active repositories while routing each suggested follow-up task to the correct repository environment.
  • Start tasks and send follow-ups with audio or voice messages across Slack, Discord, Telegram, and Microsoft Teams, with actionable guidance when transcription is unavailable.
  • Configure deployment incident banners and Slack warnings with a Statuspage-compatible unresolved-incidents feed URL, or leave the feed disabled when no URL is set.
  • Show verified linked identities for GitLab, Gitea, Bitbucket, and Azure DevOps, and use privacy-safe provider attribution for public source-control changes.

Patch changes

  • Let agents open authenticated shareable previews without being redirected to sign-in, including previews that ultimately redirect to direct machine URLs.
  • Add a direct link from model settings to Roomote's model recommendations so users can compare supported choices before configuring task roles.
  • Preserve provider-neutral source context for child tasks so agents can identify the originating conversation without inheriting live reply behavior.
  • Keep pull-request attribution current and privacy-safe across public and private repositories while preserving provider-specific follow-up links. Thanks to @T4cC0re for reporting #1184.
  • Refresh supported source-control OAuth credentials before they expire during long-running, resumed, and mixed-provider tasks while keeping temporary provider failures retryable.
  • Keep pull-request review follow-ups running until their queued work settles, release review actions after stale workers stop, and avoid duplicate completion or action notifications.
  • Reply to human-authored Slack and Discord auto-start messages when task classification or startup fails unexpectedly instead of appearing unresponsive.
  • Restore Better Stack monitoring, incident, and telemetry inspection tools in tasks while preserving Roomote's read-only integration boundary.
  • Reuse compute-provider clients across scheduler checks to prevent memory growth and worker restarts on deployments with continuously active tasks.
  • Show every active pull request linked to a task across the web app and supported chat providers instead of displaying only one associated pull request.
  • Let agents discover enabled automation models and reject unavailable model overrides when an automation is configured instead of failing later at launch.

roomote-roomote Bot and others added 28 commits August 7, 2026 16:47
Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Daniel Riccio <57051444+daniel-lxs@users.noreply.github.com>
…follow-up (#1157)

OpenCode 1.17 emits session.status(idle) followed by a paired legacy
session.idle for a single turn boundary. When the status-sourced turn
completion drained a queued deliverable prompt (e.g. a hidden PR re-review
follow-up), submitPrompt re-armed inFlight, so the trailing session.idle
re-entered finishCurrentTurn, emitted a second taskCompleted against the
now-empty queue, and HarnessManager finalized the run (onExit) while the
drained turn was still running. The follow-up then ran in a post-finalization
window kept alive only by the sleep heartbeat, and the drained turn's real
completion later fired a duplicate onExit.

Fix: arm an ignoreNextQueuedDrainSessionIdle guard when a status-sourced
completion's drain submits a prompt, mirroring the existing paired-idle
guards for stop-hook reminders, question replays, and provider recovery.
Busy/retry status transitions and StartNewTask clear it like its siblings.

The existing lifecycle test missed this because its mock emitted only a
single session.idle; the new regression test completes turns with the real
paired sequence and fails deterministically without the fix. Also include
the deferral decision inputs (phase, queued prompt count, deferred
settlement) in the manager's task-completed log line so future bypasses are
diagnosable from live logs.
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* fix: show all active PRs across chat providers

* refactor: remove singular linked PR footer contract

---------

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* fix: use public-safe source control attribution

* fix: validate public attribution identities

* fix: rebuild preserved public attribution

* refactor: delimit public attribution metadata

* fix: scrub duplicate public attribution

* fix: require exact host for attribution

* test: align attribution prompt expectations

* fix: require exact host in PR repository lookup

---------

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* feat: add source-control account identities

* fix: preserve source-control host ports

---------

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* fix: preserve PR follow-up instructions

* fix: validate PR follow-up destinations

* fix: parse PR follow-up links linearly

* refactor: generate PR attribution at write time

---------

Co-authored-by: @mrubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: @mrubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* [Fix] Reuse compute provider clients across sleep-check ticks

The sleep check runs every 60 seconds and built a brand-new compute
provider client on every tick that found active or idle runs. Each
client carries retained SDK state (connection channels, and Sandbox
objects held in the adapters' static caches pin the client that created
them), so deployments that always have active runs leaked roughly
1.5 MB per minute until the bullmq service hit its heap cap and was
OOM-killed on a ~5.5 hour cycle.

Cache one client per provider across ticks, fingerprinting the resolved
provider env values so a credential rotation rebuilds the client instead
of serving a stale one. The per-run memoization and the per-run env
resolution frequency are unchanged; only the client construction stops
repeating.

* Make adapter sandbox caches per-instance

The static sandbox caches served two failure modes: every cached
Sandbox pinned the (possibly long-dead) client that created it, and a
client rebuilt for rotated credentials kept receiving cached handles
that still used the old credentials until the TTL expired. Instance
caches make the handles die with their client, so a credential rotation
starts clean and no cross-client object graphs can accumulate.

---------

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: @mrubens <2600+mrubens@users.noreply.github.com>
)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-authored-by: Pride Musvaire <pride@lazydude.co>
Co-authored-by: @mrubens <2600+mrubens@users.noreply.github.com>
…1193)

* fix: report chat auto-start launch failures

* chore: satisfy auto-start test lint

* fix: suppress launch-failure replies on bot-authored feed messages

Launch-criteria channels are commonly wired to automated feeds, and
classifier_error returns before the launch rate cap increments, so a
sustained classifier or startup outage would reply "please try again"
to every feed message with nothing throttling it. Bot-authored failures
now stay log-only; human-authored messages keep the failure reply.

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
…tes (#1197)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
* feat: preserve source context for child tasks

* fix: clarify inherited source thread context

* fix: keep inherited source context informational

* fix: decouple context inheritance from sourceRunId semantics

- launchTask reverts to the old sourceRunId stamping (env-definition or
  notifyOnSettle only) and carries the parent pointer in a dedicated
  transient communicationContextSourceRunId field instead, so relaunch
  lineage, settle notifications, and the activation metric are unchanged
- inheritance skips launches that carry their own live communication
  context, stamps 'slack' when parent coordinates come from Slack task
  columns, and only flags communicationContextInherited when coordinates
  were actually copied
- drop the report-back rule line from task_source_context; coordinates
  only, and escape the provider like the other fields
- restore empty-string option fallback semantics in
  populateCommunicationMetadata

---------

Co-authored-by: @daniel-lxs <57051444+daniel-lxs@users.noreply.github.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: @mrubens <2600+mrubens@users.noreply.github.com>
@mintlify

mintlify Bot commented Aug 10, 2026

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated (UTC)
roomote 🔴 Failed Aug 10, 2026, 8:26 PM

💡 Tip: Enable Workflows to automatically generate PRs for you.

@roomote-community

roomote-community Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

No code issues found.

Reviewed 3bac4b3

@mrubens
mrubens merged commit d7470df into main Aug 10, 2026
37 checks passed
@mrubens
mrubens deleted the release/v0.37.0 branch August 10, 2026 21:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants