Skip to content

CAS-112: align dynamic UI eligibility - #42633

Merged
dvargasfuertes merged 3 commits into
mainfrom
apollo/cas-112-dynamic-ui-eligibility
Sep 15, 2026
Merged

dvargasfuertes merged 3 commits into
mainfrom
apollo/cas-112-dynamic-ui-eligibility

Conversation

@vellum-apollo-bot

Copy link
Copy Markdown
Contributor

Summary

  • Keep the full ui_show schema stable across live Slack and clientless background turns.
  • Preserve execution-time renderer enforcement for live non-dynamic channels, including Slack task-progress compatibility.
  • Tell non-interactive turns that UI calls persist conversation content for the next capable client and must not be presented as visible now.

Validation

  • bun test src/__tests__/subagent-tool-gate-mode.test.ts
  • bun test src/__tests__/conversation-surfaces-task-progress.test.ts
  • bun test src/__tests__/conversation-runtime-assembly.test.ts
  • bun test src/__tests__/ui-channel-variants.test.ts
  • bun test src/__tests__/channel-capabilities-dedupe.test.ts
  • bun run lint
  • bun run typecheck:fast
  • git diff --check

@vellum-apollo-bot

Copy link
Copy Markdown
Contributor Author

Review focus: this deliberately moves UI eligibility out of Slack-specific prompt-time schema projection. Please check the boundary between the stable full wire schema, live renderer enforcement, and clientless surface persistence.

vellum-apollo-bot Bot and others added 2 commits September 15, 2026 14:35
Co-authored-by: Cursor <cursoragent@cursor.com>
Part of CAS-112.

Tool definitions stay identical across Slack, desktop, and clientless
turns so the tools cache prefix can reuse. Live Slack still rejects
unsupported surfaces at execution. Background turns persist UI and are
told not to wait or claim the surface is visible. Activation-rail
conversations still receive the optional activation_moment property
because that state is conversation-stable.

The watch-retro docs now match the shipped clientless UI contract:
ui_show stays on the wire, and the retro still reports through
watch_retro_report so the daemon can append the card after the turn.

Co-authored-by: Cursor <cursoragent@cursor.com>
@dvargasfuertes
dvargasfuertes marked this pull request as ready for review September 15, 2026 14:37

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 9d7adb4712

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

Comment on lines +1152 to 1154
let allBaseDefs = [...scopedCoreDefs, ...scopedWorkspaceDefs, ...scopedMcpDefs].filter(
(d) => !excluded.has(d.name),
);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Return background-safe results for newly exposed visuals

When a clientless Slack turn selects the newly exposed visual surface type, surfaceProxyResolver persists the surface but returns the existing result at conversation-surfaces.ts:3685-3690, which says the visual is already visible inline and instructs the model not to describe or restate it. No client rendered the surface during this turn, so the model can suppress the only Slack-visible result and leave the user with no output unless they later open the conversation in a capable app. Previously the Slack projection excluded visual; either return a clientless-specific result that requires a prose response or keep this type unavailable in that context.

Useful? React with 👍 / 👎.

@dvargasfuertes
dvargasfuertes merged commit d5d0613 into main Sep 15, 2026
13 checks passed
@dvargasfuertes
dvargasfuertes deleted the apollo/cas-112-dynamic-ui-eligibility branch September 15, 2026 19:14
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