Skip to content

Promote v0.31.0 to production - #1063

Merged
mrubens merged 24 commits into
mainfrom
release/v0.31.0
Aug 3, 2026
Merged

Promote v0.31.0 to production#1063
mrubens merged 24 commits into
mainfrom
release/v0.31.0

Conversation

@mrubens

@mrubens mrubens commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Promote v0.31.0

Frozen at cff848cb3693b2a18803db3f547753cbd368414c — the commit where 0.31.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.31.0 and triggers the existing GHCR v* image publish (latest channel).
  • The release/v0.31.0 branch can be deleted after this PR merges.

Changelog

0.31.0 (2026-08-03)

This release expands Amazon Bedrock and deployment controls, refreshes Automations and self-hosted licensing, and adds copyable Cookbook recipes for common workflows.

Highlights

  • Use native Amazon Bedrock Runtime models alongside Mantle, including regional inference profiles and supported reasoning settings.
  • Find and manage custom and built-in automations through a redesigned, filterable Automations experience.
  • Disable curated integrations through a deployment policy without deleting saved credentials or affecting other provider types.
  • Copy ready-to-use Cookbook recipes for outage triage, support investigations, CI fixes, product updates, and scheduled maintenance.

Minor changes

  • Redesign Automations settings around scannable Custom, Enabled, and Available sections, with permalinked configuration dialogs, responsive custom automation controls, and category and provider-aware filtering.
  • Let deployment operators disable the curated integrations catalog and its existing connections through an environment policy without deleting saved credentials or affecting other provider types.
  • Let operators use native Amazon Bedrock Runtime models alongside Mantle, including regional inference profiles and supported reasoning settings, without changing existing Mantle configurations.
  • Add direct Roomote Cloud purchase and renewal paths to self-hosted License settings, including low-seat and upcoming-expiry guidance for administrators.
  • Show useful, dismissible product tips alongside task startup progress so users can discover Roomote capabilities while an environment boots.
  • Add a copyable Roomote Cookbook with ready-to-use recipes for vendor outage triage, support investigations, CI failure fixes, product update newsletters, and scheduled maintenance.

Patch changes

  • Keep Azure Container Apps sandboxes suspended until Roomote deliberately wakes them, recover cleanly from leftover workers, and stop retrying runs whose sandboxes were deleted. Thanks to @tebieshi for contributing this improvement.
  • Stop ChatGPT subscription connections from waiting forever on expired or blocked device codes, explain why authorization stopped, and offer a clean restart. Thanks to @daniel-lxs for contributing this improvement.
  • Recommend Claude Sonnet 5 at medium reasoning for code review when operators apply supported provider presets, while retaining Opus for planning.
  • Keep Discord task requests through account linking, focus onboarding on the required personal account connection, and preserve automation reply threads when tasks resume.
  • Keep the Users settings invite list focused on links that still have uses remaining while retaining consumed invite records.
  • Add a direct Personal settings shortcut to the signed-in user menu.
  • Make ChatGPT, xAI, and GitHub Copilot device connections handle expiry, rate limits, restarts, and stale polling consistently, with clearer terminal errors across all three providers. Thanks to @daniel-lxs for contributing this improvement.
  • Give sandbox providers more time to finish rate-limited starts before aborting, and offer a retry when a task start fails before producing output.
  • Show terminal command output again in the web task view, with collapsible details and a copy button for easier inspection.
  • Restore the previous deployment metadata and controller after a failed self-hosted image pull so operators can retry upgrades without breaking the next backup.
  • Make UI proof reject obvious visual defects elsewhere in captured frames instead of accepting evidence that only satisfies the focal claim.

roomote-community Bot and others added 24 commits August 3, 2026 01:33
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* feat: add personal settings shortcut to user menu

* fix: close user menu after settings navigation

---------

Co-authored-by: Roomote <roomote@roomote.dev>
* feat: rework automations settings UX

* improve: refine automation card details

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Roomote <roomote@roomote.dev>
* docs: add homelab deployment guide

* docs: run homelab installer as root

---------

Co-authored-by: Roomote <roomote@roomote.dev>
* feat: add self-hosted license purchase entry points

* chore: remove obsolete telemetry exports

* Disable invites at seat capacity

* Responsive fixes

* Add self-hosted license usage sync

* fix: guard self-hosted license sync

* test: cover license usage retry after cloud outage

* fix: guard concurrent license activations

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
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>
…r succeed (#1025)

* fix: stop ChatGPT device auth waiting on codes that can never succeed

The device-code endpoint returns an expires_at roughly fifteen minutes
out, but startChatGptDeviceAuth dropped it and the connect dialog had no
expiry timer, so an aged-out code kept polling behind a "Waiting for
authorization" spinner forever. Return the expiry alongside the interval
and stop the loop at the deadline with a restart prompt.

Polling also mapped every 403 and 404 to pending. Only 403 with the
structured code deviceauth_authorization_pending means the user has not
entered the code yet; 404 (deviceauth_not_found) means the issuer no
longer knows the code, and a 403 carrying any other code is a refusal
waiting cannot resolve, most often an org policy blocking the OAuth app.
Classify on error.code rather than the bare status, and give the blocked
and expired cases their own copy. An unrecognized error body still falls
back to pending, now bounded by the expiry deadline.

Rate-limited polls back off instead of failing, and the poll loop gets
the .catch() it was missing so a rejected request surfaces in the dialog
instead of rejecting unobserved.

🤖 Generated with Claude Code

* refactor: extract the deviceauth refusal branch into a pure classifier

The 403/404 handling was four sequential returns whose correctness
depended on the unrecognized-code fallback sitting between the two
specific checks. Move it to `classifyDeviceAuthRefusal`, a pure switch
keyed only on the structured error code, so the mapping reads as a table
and can be tested directly instead of through a fetch mock.

The HTTP status is deliberately absent from the signature: the issuer
reuses 403 for both pending and terminal refusals, so it carries no
information the code does not already give.

🤖 Generated with Claude Code
…CodeFlow (#1028)

The ChatGPT, xAI, and GitHub Copilot connect dialogs each reimplemented
the same device-code lifecycle (start-once guard, expiry deadline,
slow-down backoff, terminal states, restart) with drift between them.
Move the lifecycle into one hook; the dialogs become presentational
shells supplying provider-specific mutations, query keys, and copy.

The hook takes the strongest behavior from each source. From ChatGPT:
expiry deadline, failure reasons with dedicated copy, rate-limit
backoff, and the poll .catch(). From xAI: generation-counter
cancellation instead of a shared boolean, which closes a race where
cancel + quick reopen could flip the boolean back to true and revive a
stale loop still polling the previous device code. xAI and Copilot gain
the race protection and terminal polish; all three now hide the dead
code input once a terminal error is shown.

The per-provider "authorization code expired" sentence is now one config
value per dialog instead of duplicated literals. Server-side copies stay
as-is and remain produce-only.

🤖 Generated with Claude Code
* feat: show product tips during task startup

* fix: show startup tips for tasks without transcripts

* feat: improve product tip rotation

* remove debug content

* feat(web): surface practical Roomote use cases

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: sky <136036952+easonLiangWorldedtech@users.noreply.github.com>
* feat: improve automations filtering and editing

* improve: refine automations editor layout

---------

Co-authored-by: Roomote <roomote@roomote.dev>
…nt (#1018)

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: tebieshi <197311053+tebieshi@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* feat: add bulk integration disable action

* fix: prevent integrations when deployment disables them

* fix: enforce integration policy for active Linear flows

* test: update Linear env mock for integration policy

* feat: disable curated integrations by default

Flip R_CURATED_INTEGRATIONS_ENABLED to an opt-in policy so curated
integrations stay off unless the operator explicitly enables them.

* test: fix formatting and enable integrations policy in route-policy test

* feat: invert policy to R_CURATED_INTEGRATIONS_DISABLED opt-out

Curated integrations stay enabled for all deployments by default; operators
set R_CURATED_INTEGRATIONS_DISABLED=true to switch the catalog off.

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
* docs: add Roomote Cookbook recipes

* docs: add cookbook recipe issue flow

* docs: refine cookbook recipes

* docs: generate cookbook index from recipes

* docs: standardize cookbook recipe format

* docs: refine cookbook metadata

* docs: simplify cookbook recipes

* docs: format cookbook contributor links

* docs: polish cookbook presentation

* docs: update cookbook contributors

* fixes

* fix: run docs scripts with pinned Mintlify CLI

* fix

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
@mintlify

mintlify Bot commented Aug 3, 2026

Copy link
Copy Markdown

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

Project Status Preview Updated (UTC)
roomote 🟢 Ready View Preview Aug 3, 2026, 7:36 PM

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

@roomote-community

roomote-community Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

3 issues outstanding. See task

  • packages/telemetry/src/server/license-cloud.ts:149 Treating every non-409 HTTP error as rejected causes licenseUsageSyncJob to mark a 5xx/503 outage observation delivered permanently. Return failed for retryable server responses so the durable outbox actually retries.
  • packages/telemetry/src/server/license-cloud.ts:174 The conditional lease update's affected-row count is ignored, so a concurrent license-key change can make this return synced even though it persisted neither the key nor the lease. setLicenseKeyCommand then reports success for a key that is not active.
  • apps/web/src/components/settings/automations/CustomAutomationsSection.tsx:900 The custom-automation list no longer exposes or invokes triggerCustomAutomation; this removes the documented Run now capability for every custom automation. Restore a run control (disabled when the automation is off) or retain an equivalent action in its configuration dialog.

Reviewed cff848c

@mrubens
mrubens merged commit 3b0ddfb into main Aug 3, 2026
49 checks passed
@mrubens
mrubens deleted the release/v0.31.0 branch August 3, 2026 19:46
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