Skip to content

Promote v0.8.0 to production#485

Merged
mrubens merged 28 commits into
mainfrom
release/v0.8.0
Jul 17, 2026
Merged

Promote v0.8.0 to production#485
mrubens merged 28 commits into
mainfrom
release/v0.8.0

Conversation

@mrubens

@mrubens mrubens commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

Promote v0.8.0

Frozen at 9dbc8cbb9d1adf5eccb5fa5b21cf52b7a7fadf01 — the commit where 0.8.0 was versioned. Commits merged to develop after that point 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.8.0 and triggers the existing GHCR v* image publish (latest channel).
  • The release/v0.8.0 branch can be deleted after this PR merges.

Changelog

0.8.0 (2026-07-17)

Minor changes

  • Route task-sandbox inference through a control-plane gateway for every deployment: provider API keys and ChatGPT subscription auth stay server-side, sandboxes call /api/inference with a run-scoped token, and the InferenceGateway feature flag is removed so this is always on.
  • Allow self-hosted operators to set the paid-seat license key via the R_LICENSE_KEY environment variable (takes precedence over Settings → Users).
  • Add provider-local model mapping presets in Settings so operators can choose labeled mapping sets (including OpenRouter Balanced and Quick turnaround), confirm the selected mapping before it applies, and automatically add or enable referenced models.
  • Remove the authorship-rules feature (settings UI, compiler, and enqueue-time evaluation). Task commit authors and PR assignees now always use default attribution.

Patch changes

  • Automation labels spell the CodeQL brand correctly, so codeql_triage surfaces as “CodeQL Triage” instead of “Codeql Triage” in task filters, analytics, and attribution.
  • Temporarily disable Google Vertex AI and remove legacy direct Mistral execution. Model-provider credentials now enter task sandboxes only through the selected runtime provider allowlist, while unrelated task environment variables remain available.
  • Clarify the Discord install flow (including dropping the permissions integer from operator-facing guidance) and recover the Discord gateway when a deployment never received a gateway secret instead of staying stuck offline.
  • When both an OpenAI API key and a ChatGPT subscription are connected, Settings again shows a separate OpenAI provider section instead of folding every openai/ model under ChatGPT (subscription).
  • Tasks no longer abort when OpenCode surfaces a provider rate-limit as a terminal session error; the worker treats those limits as retryable and continues the run after backoff.
  • OpenRouter Connect works for self-hosted deployments whose public app URL is a loopback address, instead of failing the OAuth handoff in that configuration.
  • Refresh the shipped worker runtime when restoring task snapshots so snapshots created by an older release remain compatible with current runtime protocols such as the inference gateway.
  • Shared links into the product app now resolve to short static page titles and one-line descriptions (task, settings, history, sign-in, setup, onboarding) instead of the generic global fallback.
  • Harden high-confidence security gaps: shell-escape untrusted git and GitHub CLI arguments, tighten OAuth account linking, and strengthen run-token authentication used by sandbox runtime traffic.
  • Slack transcript decoding no longer hangs when thread activity contains crafted or pathological input.

roomote-roomote Bot and others added 28 commits July 16, 2026 18:38
…e" (#455)

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…nput (#458)

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…461)

Point docs and setup UI at the post-save Add to Discord button, and
remove the permissions-integer install instructions.

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

* Route ChatGPT-subscription inference through the gateway (Phase 3)

Keeps the ChatGPT OAuth record (OPENCODE_AUTH_CONTENT, incl. the
long-lived refresh token) on the control plane instead of shipping it
into the task sandbox.

- Gateway: a new openai-chatgpt provider with a chatgpt-oauth auth
  strategy. Per request it mints a fresh access token server-side
  (getFreshChatGptAccessToken), sets Authorization + ChatGPT-Account-Id,
  and collapses the request onto the ChatGPT Codex backend, mirroring
  OpenCode's Codex plugin (which forwards the body unchanged, so no body
  translation is needed). The account-id header is stripped from the
  inbound request so a sandbox cannot smuggle its own.
- Control plane: in gateway mode with a connected subscription + an
  openai/ role model, the resolver emits the R_INFERENCE_GATEWAY_CHATGPT
  marker instead of OPENCODE_AUTH_CONTENT.
- Worker: strips OPENCODE_AUTH_CONTENT, builds the container-reachable
  gateway URL, and rebases the OpenCode openai provider onto
  <gateway>/openai-chatgpt/v1 with the run token as apiKey.

Unit tested across types/db/worker/api with mocked upstreams. Real
ChatGPT-subscription E2E still required before enabling; runbook to
follow in the PR.

* Cover switchable models in inference gateway

* Preserve ChatGPT gateway auth semantics

* Match OpenCode subscription model eligibility

---------

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

* fix: prefer R_PUBLIC_URL for OpenRouter OAuth callbacks

Use getPublicAppUrl so self-hosted fleets with a loopback R_APP_URL
still advertise a browser-reachable OpenRouter callback and setup redirect.

* fix: build OpenRouter callback URL with new URL()

Avoid string-concat double slashes when R_PUBLIC_URL ends with /.

---------

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…aping (#467)

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…470)

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

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…ack (#476)

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
…th from security review (#477)

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* [Improve] Add static route page titles for link previews

Use privacy-safe static titles and descriptions across key app routes so shared links no longer fall back to the generic product metadata.

* [Fix] Gate sign-up metadata with the same eligibility check as the form

Only emit Roomote Sign up titles when canVisitorSignUp() and invit structs match the form defaultMode, so outdated invite query params no longer mislabel the sign-in surface.

---------

Co-authored-by: Roomote <roomote@roomote.dev>
* feat: add provider model mapping presets

* fix: correct preset model fallback metadata

* fix: align preset preview fallbacks

* fix: match preset preview model metadata

* feat: share welcome step across onboarding flows

---------

Co-authored-by: Roomote <roomote@roomote.dev>
Co-authored-by: Bruno Bergher <bruno@roocode.com>
* fix: remediate open CodeQL security and quality alerts

* fix: tighten quoted-prefix and OOB stripping boundary checks

* fix: require self-closing quoted prefix tags before stripping

---------

Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
Co-authored-by: Matt Rubens <2600+mrubens@users.noreply.github.com>
* refactor: data-drive automation destination fields

Collapse per-automation Slack/Discord form, resolution, and upsert maps into
a shared destination descriptor registry so new automations do not re-copy
field scaffolding while keeping one-of and legacy preserve-on-omit behavior.

* fix: remove unused destination scaffolding leftovers

* chore: drop unused destination field helpers

---------

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

roomote-roomote Bot commented Jul 17, 2026

Copy link
Copy Markdown
Contributor

1 issue outstanding. See task

  • packages/types/src/acp.ts:1348 Replace the recursive Slack wrapper traversal with an iterative implementation. The successful parse path consumes one stack frame per valid <thread_activity> block: 2,000 blocks followed by <slack_message> already make normalizeTranscriptUserText throw RangeError: Maximum call stack size exceeded, and activity-only input overflows at roughly 3,000 blocks. The new tests only repeat unmatched opening tags, so they do not cover this path and crafted thread activity can still break transcript processing.

Reviewed 9dbc8cb

@mrubens

mrubens commented Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

@roomote-roomote review

@roomote-roomote

Copy link
Copy Markdown
Contributor

I started a PR review task for this request. See task

@mrubens
mrubens merged commit 0e1dea2 into main Jul 17, 2026
47 checks passed
@mrubens
mrubens deleted the release/v0.8.0 branch July 17, 2026 12:57
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.

1 participant