BI and Reporting Release Notes
Release notes for business intelligence, reporting and data visualization platforms
Products (11)
Latest BI and Reporting Updates
- Jul 18, 2026
- Date parsed from source:Jul 18, 2026
- First seen by Releasebot:Jul 19, 2026
Performance: lighter memory and smoother under heavy load
Superset improves performance with lower memory use, fewer crashes, smoother Git handling, and much lighter background CPU usage for busy terminal sessions.
TL;DR
• Less memory, fewer crashes. Sessions with lots of terminals stay responsive and are far less likely to white-screen, even on 8 or 16 GB machines.
Renderer memory 1,127 → 838 MB (−26%), JS heap 581 → 286 MB (−51%), 4× fewer GPU contexts.
• No more hitching from git. Switching branches or changing lots of files at once no longer stutters the app.
Worst-case stall on the UI thread 82.3 → 28.0 ms (3× smaller), typical 24.5 → 9.5 ms.
• Quieter in the background. Port detection uses far less CPU, so quieter fans and better battery, even with many terminals open.
Background scans 15 → 1 per cycle (15× fewer), idle terminals scan every 30s instead of every 2.5s (12× less).
Lower Memory When You Keep Many Terminals Open
Every hidden terminal used to keep its full scrollback and a live GPU context, forever. Open a lot of them in one session and memory could climb past a gigabyte.
Now Superset keeps only your most-recent terminals in memory. The rest are saved to disk and rebuilt when you switch back. The process behind each one keeps running the whole time, so nothing is lost.
The test: 16 background terminals, each filled with about 5,000 lines.
Metric Before After Terminals held in memory (GPU contexts) 16 4 Scrollback lines retained 80,016 20,004 Renderer JS heap 581 MB 286 MB (−51%) Renderer process memory (RSS) 1,127 MB 838 MB (−26%)Renderer memory with 16 terminals open drops from 1,127 MB to 838 MB, a 26% reduction
Live GPU contexts held in memory drop from 16 to 4 with 16 terminals open, 4 times fewer
You set the limit in Settings → Terminal → Background terminal memory (default 12).
Active terminals are never touched. Neither are running TUIs like vim or a coding agent. Hidden in-app browser tabs get the same treatment.
Smoother While Git Churns in Big Repos
In big repos, git status used to run on the same thread that streams your terminal output. So a branch switch, or a burst of file changes across several workspaces, could make the whole app hitch.
That work now runs on a background pool of workers. Large batches of file-change events are capped instead of piling up.
The test: 8 workspaces churning a 20,000-file repo, with 600 files dirty.
Metric Before After File-watch stall, p99 31.7 ms 10.7 ms File-watch stall, worst case 82.3 ms 28.0 ms Full status refresh, p99 24.5 ms 9.5 ms Full status refresh, worst case 49.0 ms 17.6 msWorst-case main-thread stall under heavy git load drops from 82.3 ms to 28.0 ms
Typical main-thread stall (p99) under heavy git load drops from 24.5 ms to 9.5 ms
Lower is better here. It means the thread that keeps your terminals and UI responsive spends far less time blocked.
There's no setting to flip. It's on for everyone.
Lighter Background CPU From Port Detection
Port detection spots a dev server and offers to open it. It used to scan the whole process table once per terminal, on every tick. The more terminals you had open, the more background ps processes it spawned.
Now it runs one shared scan per cycle, no matter how many terminals are open. Idle terminals scan even less often.
The test: the real scanner with 15 terminals registered, counting every ps spawn over 6 cycles.
Metric Before After ps spawns per cycle 15 1 Total ps spawns over 6 cycles 90 6Port detection with 15 terminals open drops from 15 background process scans per cycle to 1
Idle terminals scan every 30 seconds instead of every 2.5 seconds, 12 times less often
Idle terminals also slow down, from a scan every 2.5 seconds to every 30. They speed back up the moment they print output. So a machine full of quiet terminals nearly stops scanning.
Original source - Jul 16, 2026
- Date parsed from source:Jul 16, 2026
- First seen by Releasebot:Jul 18, 2026
Qlik Cloud by Qlik
Qlik Trust Score™ forensic for Data products
Qlik Cloud adds a new Quality tab in Qlik Trust Score™ for Data products, giving data product owners a deeper, more actionable drill down into trust and quality with root-cause visibility into what is driving score changes.
July 16, 2026
Qlik Trust Score™ forensic for Data products
Data products Qlik Trust Score™ drill down now gives you a deeper, more actionable view of trust and quality.
What’s new
A new Quality tab inside each data product gives you forensic-level visibility into your composite Qlik Trust Score™, so you can see not just where the score sits today, but what's moving it and which datasets are driving the change.
From the Quality tab you can follow the score from headline number all the way to root cause, layer by layer.
Why this matters
Data product owners can now pinpoint exactly what's impacting their trust score and why, getting to root cause in just a few clicks without leaving the data product. That transparency enables the Qlik Trust Score™ to be a truly explainable signal consumers can rely on, and producers can act on.
Qlik Trust Score™
Some functionality may be rolled out in phases and not immediately available in all regions.
Original source All of your release notes in one feed
Join Releasebot and get updates from Apache and hundreds of other software products.
- Jul 16, 2026
- Date parsed from source:Jul 16, 2026
- First seen by Releasebot:Jul 17, 2026
Qlik Cloud by Qlik
Business glossary context for Qlik Answers application analysis
Qlik Cloud adds business glossary context for Qlik Answers application analysis, using linked definitions and synonyms to improve semantic matching and consistency when indexing master items.
July 16, 2026
Business glossary context for Qlik Answers application analysis
Qlik Answers now uses linked business glossary definitions and synonyms when indexing application master items, improving semantic matching and consistency across terminology used in user questions.
Glossary definitions are evaluated at indexing time. If glossary definitions are updated after indexing, reindex the application to apply the changes. Only glossary terms in Verified state are considered.
Working with applications in Qlik Answers
Combining master item descriptions and business glossary terms
Not supported in Qlik Cloud Government.
Not supported in Qlik Cloud Government - DoD.Some functionality may be rolled out in phases and not immediately available in all regions.
Original source - Jul 16, 2026
- Date parsed from source:Jul 16, 2026
- First seen by Releasebot:Jun 30, 2026
- Modified by Releasebot:Jul 17, 2026
Qlik Cloud by Qlik
Application script lifecycle tools for Qlik MCP server
Qlik Cloud adds application script lifecycle tools for Qlik MCP server, letting LLM clients create apps, manage load scripts, run and monitor reloads, and inspect logs and data models for guided and automated workflows.
July 16, 2026
Application script lifecycle tools for Qlik MCP server
New Qlik MCP tools support the application and script lifecycle from your LLM client. You can create an application, inspect and update its load script, run a reload, and verify the results from status and logs. These tools support both guided authoring and automated workflows.
The new tools let you:
- Create applications and generate or retrieve script content.
- Retrieve, replace, and patch the application load script.
- Trigger, monitor, and cancel reloads, and retrieve reload logs.
- Inspect the resulting application data model.
Qlik MCP tools
Some functionality may be rolled out in phases and not immediately available in all regions.
Original source - Jul 14, 2026
- Date parsed from source:Jul 14, 2026
- First seen by Releasebot:Jul 15, 2026
- Modified by Releasebot:Jul 17, 2026
Qlik Cloud by Qlik
New Direct Access gateway version (1.7.16)
Qlik Cloud releases Direct Access gateway 1.7.16 with per-connection chunks recovery control, Canada region support, faster reload stream throughput, and custom file extension support for the File Connector.
July 14, 2026
New Direct Access gateway version (1.7.16)
Direct Access gateway 1.7.16 introduces both new and enhanced features, and resolves several issues. For upgrade instructions and a list of resolved issues, see Upgrading the Direct Access gateway installation
Chunks recovery can be disabled per connection
You can now disable chunks recovery for specific connectors, providing more granular control over reload resilience and performance. This setting overrides the global chunks recovery configuration and can be configured directly in the connector settings or via the Public API.
For configuration details, see Disabling chunks recovery per connection.
Canada region support
Direct Access gateway now supports deployment in the Canada region, expanding availability for customers with data residency requirements.
Improved reload stream throughput
Reload stream throughput has been improved through optimization of thread pool management, WebSocket protocol handling, and adaptive pacing. These improvements are automatic and require no configuration.
File Connector custom file extension support
The File Connector now allows you to configure custom file extensions beyond the default supported types. Configure allowed extensions through the gateway settings or by editing the extension configuration file.
For configuration details, see Allowing custom extensions.
Some functionality may be rolled out in phases and not immediately available in all regions.
Original source - Jul 11, 2026
- Date parsed from source:Jul 11, 2026
- First seen by Releasebot:Jul 12, 2026
Rich input for the terminal, Ghostty-speed scrolling, and Mistral Vibe
Superset adds a richer terminal and faster agent workflows, including editor-style terminal input, Ghostty-speed scrolling, and Mistral Vibe support. It also expands remote host access, improves updates and logs, and delivers fixes for sessions, layouts, themes, and terminal stability.
Rich Input for the Terminal #5453
Rich Input for the Terminal
Press ⌘I over any terminal pane and compose in a real editor instead of the raw TTY line. Great for prompting CLI agents like Claude Code, Codex, and OpenCode.
- Enter sends, Shift+Enter adds a newline, and multiline prompts land as one block instead of executing line-by-line
- @file mentions work, powered by the same editor as workspace chat
- One global toggle covers every pane and persists across restarts
Terminal Scrolling at Ghostty Speed #5563
Terminal Scrolling at Ghostty Speed
Claude Code transcript scrolling in Superset terminals used to crawl at about a third of native speed. Agent TUIs now compensate correctly for our terminal, and scrolling matches Ghostty.
Mistral Vibe Joins the Agent Roster #5552
Mistral Vibe Joins the Agent Roster
Mistral Vibe is now a first-class terminal agent, contributed by @ThomsenDrake from the Mistral team. Pick it in any agent picker, choose a model, and get the same working indicator and completion chime as the built-ins.
- Model picker includes mistral-medium-3.5 and devstral-small
- GPT-5.6 Sol, Terra, and Luna added to the Codex model picker
Improvements
- Wake offline hosts - Attach a wake command to any host and run superset hosts wake to power it back on
- Remote hosts on every plan - Connecting to remote hosts through the relay no longer requires a paid plan
- Sydney relay region - Australian users get a local relay for lower latency and fewer dropped connections
- Inline update pill - The update toast is gone; a compact pill in the sidebar shows download progress, installs on click, and confirms the new version
- Copy CI logs - Copy a failed GitHub Actions job's logs straight from the review sidebar for pasting into a prompt
- Linear filters for Tasks - Filter and sort tasks by Linear project, cycle, due date, and priority across the desktop, CLI, and MCP
- Clear terminal connection errors - When a terminal can't connect, the pane now says why (host offline, no access, or a relay routing issue)
- Delete hosts - Owners can remove a host from Settings with typed confirmation
- Presets bar in the View menu - Show or hide the presets bar from View → Toggle Presets Bar
- CLI workspace lookup - superset ws get prints a workspace's details, with --field for scripting
- The main workspace is "local" - The repo checkout always displays as "local" and can no longer be renamed
Experimental: live agent sessions on iOS - an early build of driving a coding agent running on your desktop from the iOS app; the agent and your code stay on your machine. Off by default under Desktop → Settings → Security.
Bug fixes
- Fixed remote-host terminals showing "disconnected" when the host lives in a different relay region
- Stopped broken sessions from hammering auth endpoints with retry storms
- Diff view syntax highlighting now follows your custom theme
- Custom agent icons now apply to terminal presets
- Malformed pane layouts heal themselves instead of crashing the workspace
- Capped renderer memory growth from long chat sessions
- Workspaces now stay in the creating state until creation fully resolves
- Fixed agent launch failing when attachment directories were missing
- Fixed git status failing under a truncated login-shell PATH
- More reliable AI-generated workspace names
- Stopped sync clients from retrying fatal errors in a loop
- Terminal streams now close cleanly with accurate error codes instead of hanging
- Jul 11, 2026
- Date parsed from source:Jul 11, 2026
- First seen by Releasebot:Jul 12, 2026
feat(desktop): add View menu toggle for the presets bar #5576
Superset adds a View menu toggle for the presets bar in v1 and v2 workspaces, with v2 hiding the entire strip and moving the run button into the TopBar. It keeps the menu and workspace state in sync while preserving existing shortcuts and visibility settings.
Adds a View → Toggle Presets Bar menu item that shows/hides the presets bar in both v1 and v2 workspace views (previously only reachable via the in-bar gear menu / Add Tab dropdown).
In v2, hiding the presets bar now hides the whole strip: the run script button relocates into the TopBar via a portal slot instead of leaving a slim stub bar behind.
Extracts two shared helpers along the way: useShowPresetsBar (v1 optimistic setting mutation, previously copy-pasted in PresetsBar and GroupStrip) and useSlotElement (portal slot lookup, previously inlined for the right sidebar).
Why / Context:
The presets bar visibility toggle only lived inside the bar itself and the Add Tab dropdown. A View menu entry is the conventional macOS home for chrome show/hide toggles. Separately, v2's "hidden" state wasn't really hidden — it kept a dedicated row just for the run button.
How It Works:
- main/lib/menu.ts adds the View item, which emits toggle-presets-bar on the existing menuEmitter; the menu.subscribe tRPC observable forwards it to the renderer (same path as Open Repo / Settings).
- V1: ContentView subscribes and flips the SQLite showPresetsBar setting through useShowPresetsBar, which reads the current value from the query cache so the toggle never acts on a stale closure.
- V2: the listener lives in v2-workspace/layout.tsx, deliberately above WorkspaceProvider. workspaceTrpc.Provider (nested inside it) shares @trpc/react-query's default React context, so electronTrpc hooks below it silently resolve the host-service httpBatchStreamLink client — which throws on subscriptions. A code comment documents this constraint.
- Run button relocation: TopBar renders an empty slot div on v2 workspace routes (empty:hidden avoids a phantom flex gap). When the presets bar is hidden, the v2 page portals the run button into it, keeping the button's React ownership (pane store, launcher, workspace providers) inside the page tree while the DOM lands in the TopBar.
Manual QA Checklist:
- View → Toggle Presets Bar hides/shows the bar in a v1 workspace
- View → Toggle Presets Bar hides/shows the bar in a v2 workspace
- Toggling on the dashboard (no workspace open) is a no-op, no errors
- Existing gear-menu / Add Tab dropdown checkboxes still work and stay in sync
- Hiding the presets bar removes the entire strip (no stub row)
- Run button appears in the TopBar (left of Open In) while hidden, and works
- Showing the bar again returns the run button to the bar's trailing edge
- Run button styling looks correct against the TopBar height (incomplete)
- RUN_WORKSPACE_COMMAND hotkey works in both states
- v1 and v2 visibility each persist across app restart (independent stores, pre-existing behavior)
Testing:
- bun run typecheck
- bun run lint
- Manual testing in dev mode (v1 + v2 workspaces)
Design Decisions:
- Plain toggle item instead of a checked menu item: a checkbox would require main-process knowledge of renderer state (two divergent stores, v1 SQLite vs v2 local prefs) plus menu rebuilds on every change. The plain item needs no sync and can't drift.
- Per-view listeners instead of one global handler: only the active workspace route is mounted, so each view flips exactly its own store; a global handler would need route sniffing to pick the store.
- Portal for the run button instead of rendering it in TopBar: the button needs useV2WorkspaceRun state that only exists inside the workspace page's provider tree; TopBar is outside it.
Known Limitations:
- The @trpc/react-query shared-default-context footgun remains: any electronTrpc hook used under workspaceTrpc.Provider silently talks to the host-service client. Giving electronTrpc a dedicated context (context: createContext(null)) would eliminate the bug class — deferred as a follow-up since it changes plumbing app-wide.
Summary by cubic:
Adds a View → Toggle Presets Bar for v1 and v2 workspaces. In v2, hiding the bar removes the strip and portals the run button into the TopBar; toggles read state at call time and handle rapid events correctly.
Summary by CodeRabbit:
New Features:
- Added a Toggle Presets Bar option to the desktop View menu.
- Presets bar visibility can now be toggled from the menu and stays synced with the workspace UI.
- Updated the v2 workspace layout so the run-button area adjusts when the presets bar is hidden.
Bug Fixes:
- Reduced brief visual flashing when restoring the workspace’s saved sidebar/toolbar state.
- Jul 11, 2026
- Date parsed from source:Jul 11, 2026
- First seen by Releasebot:Jul 12, 2026
feat(mobile): live ACP agent sessions end to end (host harness, mobile UI, desktop gate)
Superset adds an experimental iOS live agent session feature that lets the mobile app control coding-agent runs on a desktop host, with streamed updates, permissions, reconnect support, and an opt-in security gate disabled by default.
This adds an experimental way to start and control a coding-agent session running on a desktop host from the iOS app.
The mobile app is a remote UI; the agent process, workspace access, permissions, and native session files stay on the desktop.
The feature is off by default behind Desktop > Settings > Security > Enable live agent sessions (experimental).
- iOS session UI
- relay (authenticated HTTP + WebSocket proxy)
- host-service tRPC + session stream
- AcpSessionManager
- one claude-agent-acp child per active session
- Claude's native on-disk session store
The detailed ACP-vs-direct-SDK walkthrough is in the standalone comparison page. This PR body is the shorter implementation guide for reviewers.
What changed
Area Responsibility packages/host-service Owns adapter processes, ACP JSON-RPC, session state, permissions, the bounded update journal, WebSocket fan-out, tRPC commands, and restart resurrection. packages/host-client (new) Platform-neutral relay transport: SuperJSON tRPC calls, one forced-token refresh after a 401, and fresh authenticated WebSocket URLs on reconnect. packages/session-protocol (new) Shared session/frame contracts, input schemas, timeline fold, reconnect/dedup/reset client, and React hooks. apps/mobile iOS session list and thread UI: open a workspace's context menu > Live sessions, then drive messages, plans, nested tool calls, model/mode/effort controls, permission and question cards, cancel, pagination, and reconnect/error banners. apps/desktop Stores the opt-in security setting and restarts host children with SUPERSET_ACP_SESSIONS=1. It does not render this session UI.The existing Mastra chat path is not rewritten by this PR; live ACP sessions have a separate mobile route while the feature is evaluated.
Protocol flow
Create and run a turn
The public Superset session id is different from the adapter's native session id.
mobile > host tRPC acpSessions.create { sessionId, workspaceId }
host > adapter initialize
host > adapter session/new { cwd, mcpServers: [] }
adapter> host { sessionId: , modes, configOptions }
host > mobile { sessionId: , status: "idle", ... }A prompt is admission-acknowledged over HTTP; a potentially long-running turn does not keep a relay request open:
mobile > host tRPC acpSessions.prompt { sessionId, prompt }
host > mobile { accepted: true }
host > adapter session/prompt
adapter> host session/update notifications
host > mobile WS { seq, sessionId, frame }When the adapter blocks on a tool or AskUserQuestion, the host parks the ACP request and streams a renderable card to mobile. The mobile response resolves that exact request id:
adapter> host session/request_permission { toolCall, options }
host > mobile WS permission_requested { requestId, ... }
mobile > host tRPC respondToPermission { requestId, outcome }
host > adapter { outcome }
host > mobile WS permission_resolvedSingle-select, multi-select, and skipped question answers are supported. The adapter's paired free-text *_custom fields are intentionally ignored today, so the mobile flow is tap-only. Multi-select answers use ACP's _meta extension while preserving a normal first optionId for single-select consumers.
Reconnect and restart
Each runtime has a gapless seq journal. A reconnect presents its last sequence; the host replays (since, latest] and then attaches the live subscriber without a handoff gap. Duplicates are ignored. A missing/evicted cursor produces a terminal reset, after which the client refetches state/history and opens a fresh stream URL/token.
Current caveat: the numeric cursor does not yet include a journal-incarnation id. A new journal starts at 1 after host resurrection, so an overlapping pre-restart cursor is not guaranteed to be recognized as stale by number alone. The mobile hook's normal restart path refetches state/history before attaching; making cross-incarnation rejection intrinsic to every cursor is tracked as P0 follow-up.
Host SQLite stores only the durable binding needed to find the harness-owned session again:
Superset session id > workspace id + native ACP session id + harness + cwd
After a host restart, list/get return the row as status: "offline" without starting a process. The first live operation (getMessages, prompt, permission/config command, or stream attach) spawns a new adapter and calls:
host > adapter session/load { sessionId: , cwd }
adapter> host replayed session/update notifications
host > mobile rebuilt transcript + live updatesAn in-flight turn and pending permission callbacks do not survive a host restart. Replayed tool calls that were left open are terminalized instead of appearing to run forever.
If the native Claude session file was deleted or is corrupt, session/load fails. The registry row remains offline and retryable; the stream emits reset: "session_load_failed", the hook retries through tRPC, and the actual load error is shown in the thread's destructive error banner. The composer stays hidden until resurrection succeeds, and no replacement session is silently created.
Security and feature gating
- The setting defaults off. When off, the WebSocket route is not mounted and every ACP procedure except list rejects with PRECONDITION_FAILED.
- list remains authenticated but returns { items: [], enabled: false }, so the sessions screen can feature-detect without an extra capability endpoint.
- Existing host auth protects both tRPC and WebSocket paths; reconnects mint a fresh short-lived JWT.
- ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are removed at the adapter spawn boundary, so a repo .env cannot override the user's Claude login.
- Host SQLite stores registry metadata only. Message text, tool payloads, permission payloads, and journal frames are not copied into that table.
History, memory, and validation boundaries
The host journal is a fixed-capacity O(1) circular buffer (5,000 envelopes), and pre-runtime session/load replay buffering is capped to the same window. This prevents lifetime-unbounded host memory, but the journal still serves both recent reconnect catch-up and getMessages pagination. Because ACP exposes whole-transcript replay rather than paginated native history, history older than the retained window is not currently available through Superset.
The React hook retains the pages the user loaded plus live envelopes for the current mount so it can refold the timeline. Separating disk-backed history from a much smaller catch-up ring, and bounding the live client overlay, is explicitly follow-up work rather than something this PR claims to have solved.
TypeScript is strict across the production path, but runtime validation is not complete. tRPC inputs are Zod-validated and the official ACP SDK validates its registered request/notification boundary; nested WebSocket payloads, generic relay outputs, adapter responses, and SQLite rows are not all fully parsed by canonical Zod schemas yet. The current truth and the hardening plan are documented in packages/host-service/docs/acp-sessions.md and plans/acp-session-follow-ups.md.
Test coverage
Primary confidence: authenticated real-Claude runs
The ACP_E2E=1 suites are the important compatibility evidence. Nothing at the model/adapter boundary is mocked: they use this Mac's authenticated Claude CLI account, a real Sonnet model, the pinned claude-agent-acp executable, real ACP JSON-RPC over stdio, AcpSessionManager, and the real WebSocket route/client.
The manager suite covers real initialize/create/prompt/fold behavior, a saved multi-agent Workflow, AskUserQuestion, tool permissions, cancellation after permission, first-response-wins, parallel tool use, and adapter death. The stream suite runs the same real adapter/model through the actual WebSocket route and sync client, covering concurrent subscribers, a mid-turn disconnect/cursor reconnect with no gaps or duplicates, and eviction reset/re-attach.
The Workflow assertion does not stop at Claude's asynchronous async_launched acknowledgement. It waits for the persisted run to reach completed, then verifies all five Sonnet agents, non-zero real token/tool usage, two parallel audits, and the final structured verdict. In the latest complete authenticated run, that Workflow finished in 36.1 seconds with 5 Sonnet agents, 77,981 tokens, and 14 tool calls.
Run the full authenticated lane on a logged-in Mac whenever changing the ACP runtime, adapter/SDK, Workflow handling, permissions, questions, cancellation, stream/reconnect/sequencing, or resurrection:
cd packages/host-service ACP_E2E=1 ACP_E2E_MODEL=sonnet ACP_E2E_EFFORT=low \ bun test \ test/integration/acp-sessions.integration.test.ts \ test/integration/acp-sessions-stream.integration.test.tsThese tests are skipped in ordinary CI only because CI does not have a Claude login and the runs spend real tokens. That is an infrastructure limitation, not a signal that this lane is optional; until an authenticated runner exists, the agent making a relevant change is expected to run it locally and report the real result.
Latest full authenticated result: 10/10 passed, 113 assertions, 72.1 seconds.
One current adapter behavior is pinned explicitly: Claude emits two parallel Bash tool uses together, but claude-agent-acp 0.56.0 exposes their permission callbacks to Superset one at a time. Superset still supports truly simultaneous pending permission requests; that state-machine case is exercised by the deterministic backup below.
Belt and suspenders: deterministic regression breadth
The always-run deterministic ACP adapter is deliberately secondary. It speaks real ACP JSON-RPC over stdio through the official SDK and gives cheap breadth plus exact fault injection, but it uses no Claude model/account/network and cannot establish real adapter/model compatibility.
Covered scenarios include:
- a 30-turn marathon with gapless streaming, pagination, and identical refolding;
- prompt admission/rejection/recovery and concurrent turns;
- allow/deny, stale duplicate answers, multiple pending permissions, and single-/multi-question elicitation forms;
- cancel mid-tool, cancel while permission-blocked, adapter death, and sibling-session isolation;
- stream drop/reconnect from cursor, duplicate suppression, malformed frames, journal eviction/reset, and two concurrent subscribers;
- real host-client question answering, in-flight cancellation, simultaneous permissions, cursor reconnect, host/app/server/SQLite close and rebuild, passive offline listing, session/load transcript replay, bounded replay, and deleted native-session failure;
- mobile presentation regression coverage for the exact missing-transcript banner, the "Session could not be resumed" empty state, and the disabled composer;
- create idempotency/workspace conflicts, list/message cursor validation, model/mode/config updates, title clearing, feature gate/auth, and credential scrubbing;
- relay serialization, real tRPC error messages, 401 refresh-once, and fresh WebSocket tokens.
The host-client boundary suite is another belt-and-suspenders layer: it starts the real createApp host and crosses actual auth, HTTP/SuperJSON/tRPC, WebSockets, child-process stdio, and on-disk SQLite through @superset/host-client; only the model/adapter behavior is deterministic. It is especially valuable for the question, abort, simultaneous-permission, reconnect, full host/app/server/DB rebuild, resume, and missing-native-transcript paths, but it does not replace the authenticated real-Claude lane.
Current ACP evidence on this head: the authenticated Sonnet lane is 10/10 (113 assertions), and the focused deterministic ACP/runtime/host-client lane is 49/49 (553 assertions). Host-service typecheck and root lint also pass. The broader branch baseline previously passed Sherif, 34/34 Turbo typecheck tasks, 14/14 Turbo test tasks (including 835 host-service tests), release typecheck, 15/15 release tests, unified-version validation, and an iOS production Metro export (5,556 modules).
Suggested review order
- packages/host-service/docs/acp-sessions.md > current behavior and known limits.
- packages/host-service/src/runtime/acp-sessions/acp-sessions.ts > lifecycle and ACP bridge.
- packages/host-service/src/runtime/acp-sessions/{persistence,journal,stream}.ts > durability and delivery.
- packages/session-protocol/src/{api,envelope,state}.ts and src/client/subscribeToSession > shared wire contract.
- packages/session-protocol/src/react/useAcpSession > resync/pagination state owner.
- apps/mobile/.../chat/acp/ > iOS presentation and interaction layer.
- packages/host-service/test/integration/acp-sessions*.test.ts > executable behavior matrix.
Remaining architecture and production-hardening work is centralized in plans/acp-session-follow-ups.md; completed implementation history is archived under plans/done/.
Original source - Jul 10, 2026
- Date parsed from source:Jul 10, 2026
- First seen by Releasebot:Jul 12, 2026
feat(shared): add GPT-5.6 models to Codex picker
Superset adds GPT-5.6 Sol, Terra, and Luna to the Codex new-session model picker, giving users new model choices and adding tests to confirm each ID is accepted.
Adds GPT-5.6 Sol, Terra, and Luna to the Codex new-session model picker.
Tested each ID with
codex exec --model <id> "what model are you?"(exit 0), plus unit tests, lint, and typecheck.Summary by cubic
Added GPT-5.6 Sol, Terra, and Luna to the Codex new-session model picker so users can choose the latest variants. Added tests to verify each model ID is accepted.
Summary by CodeRabbit
- New Features
- Added support for selecting GPT-5.6 Codex models: Sol, Terra, and Luna.
Greptile Summary
This PR adds three new GPT-5.6 model variants — Sol, Terra, and Luna — to the Codex new-session model picker by inserting entries at the top of the codex preset's model list in AGENT_MODEL_SUPPORT, and adds a covering test for all three IDs.
Three { id, label } entries for gpt-5.6-sol, gpt-5.6-terra, and gpt-5.6-luna are prepended to the codex section of AGENT_MODEL_SUPPORT; ordering is consistent with newest-first across the file.
A new it() block iterates all three IDs and confirms buildAgentModelArgs("codex", model) returns ["--model", model], matching the pattern of adjacent tests.
The new models do not appear in SUPERSET_CHAT_MODELS, unlike gpt-5.5, gpt-5.4, and gpt-5.3-codex which each have openai/-prefixed entries there; whether this is intentional or an oversight is worth confirming.
Confidence Score: 4/5
The change is a small, additive list edit with no functional risk to existing model selections; the only open question is whether the new models should also appear in the Superset chat model list.
The change touches only a static data array and its test. Existing model selections are unaffected, the new entries are validated by the test, and buildAgentModelArgs safely ignores any ID not in the curated list. The one open question — whether gpt-5.6-* should also land in SUPERSET_CHAT_MODELS — could leave those models absent from the chat picker if they are in fact supported there, but does not introduce wrong behavior on the Codex path.
File affected: packages/shared/src/agent-models.ts — specifically whether the new models warrant corresponding entries in SUPERSET_CHAT_MODELS.
Additional notes
The new gpt-5.6-sol/terra/luna models are added only to the Codex section and not to SUPERSET_CHAT_MODELS. If these models are accessible through the Superset chat API (with an openai/ prefix), the omission would mean they never appear in that picker. It is unclear if this omission is intentional or an oversight.
Original source - Jul 10, 2026
- Date parsed from source:Jul 10, 2026
- First seen by Releasebot:Jul 12, 2026
fix(relay): allow free plans to use the relay #5571
Superset relaxes relay access so free-plan users with an authorized host can use the relay HTTP proxy and /tunnel WebSocket. Access now depends only on host authorization, while the desktop paywall UI stays unchanged.
Relay access no longer requires a paid subscription. The relay gate (checkHostAccess) now grants access based solely on result.allowed from host.checkAccess, dropping the && result.paidPlan requirement. Free-plan users whose host is authorized in their org can now use the relay HTTP proxy and /tunnel WebSocket instead of getting 403 Forbidden / a closed socket.
Scope is limited to the relay server enforcement — the only place that actually blocked free users. The desktop paywall UI is intentionally left untouched. The paidPlan field returned by host.checkAccess is now unused by any consumer but kept in place to minimize the diff.
Test Plan
- Free-plan user's authorized host connects via relay (no 403 / tunnel close)
- Non-authorized host (wrong org) still denied
- Paid-plan behavior unchanged
Summary by cubic
Allow free-plan users with an authorized host to use the relay HTTP proxy and /tunnel WebSocket. Access now relies only on host.checkAccess returning allowed, removing the paid plan check.
Summary by CodeRabbit
Bug Fixes
- Host access is now granted whenever access is approved, including for eligible plans that were previously blocked by an unnecessary plan-status check.
Greptile Summary
This PR removes the paidPlan requirement from the relay access gate, so free-plan users whose host is authorized in their org can now connect via the relay HTTP proxy and WebSocket tunnel. The change is limited to a single expression in checkHostAccess. The ok condition in apps/relay/src/access.ts changes from result.allowed && result.paidPlan to result.allowed, granting relay access based solely on host authorization rather than subscription tier. The paidPlan field returned by host.checkAccess is retained but no longer consumed by any caller; the desktop paywall UI is intentionally unchanged.
Confidence Score: 5/5
Safe to merge — the change is a one-line relaxation of a business-logic gate with no effect on the surrounding auth, caching, or error-handling paths. The only modified line drops && result.paidPlan from the access decision. Host authorization (result.allowed) is still enforced, org membership is still checked locally before any API call, and the LRU caches continue to behave correctly. The unused paidPlan field is kept in the response type to minimise diff surface. No auth bypass, no data-plane change, no cache semantic shift. No files require special attention.
Original source