Skip to content

fix(mcp): mark declared tool failures as errors - #15617

Merged
maria-rcks merged 4 commits into
pingdotgg:mainfrom
maria-rcks:fix/15566-mcp-failure-envelope-round2
Oct 6, 2026
Merged

maria-rcks merged 4 commits into
pingdotgg:mainfrom
maria-rcks:fix/15566-mcp-failure-envelope-round2

Conversation

@maria-rcks

@maria-rcks maria-rcks commented Oct 4, 2026 •

Copy link
Copy Markdown
Collaborator

adds integration coverage for mcp failure flags and output schemas using the official sdk validator. main already contains the production fix; this diff retains the regression coverage and validator dependency.

verified the actual codex provider/client path: t3_thread_read for a missing thread returned isError: true and the encoded OrchestratorMcpFailure with thread_not_found; the next call for an existing thread completed with the structured thread result. both persisted tool rows and the provider's report appeared in the actual client. production mcp, contracts and effect-patch source on running 321f9456 is identical to reviewed 50001d9; differences in those scoped paths are two existing test files only. other providers and failure kinds were not exercised live.

existing production-registration tests use the official mcp sdk validator for success, declared failures and parameter failures, and cover malformed output rejection and private defect redaction. the current integration suite, server typecheck and scoped lint passed. github status is checked separately.

actual provider mcp typed failure in the client

actual provider mcp successful thread read in the client

actual mcp failure and success detail interaction

closes #15566

implementation: codex; original model unrecorded. evidence: gpt-6.1-sol, codex harness.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L 100-499 changed lines (additions + deletions). labels Oct 4, 2026
Comment thread patches/effect@4.0.0-rc.115.patch Outdated
@coderabbitai

coderabbitai Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: pingdotgg/t3code/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 3d7ec669-0d36-4f42-87ce-3b0dc4aeb4d1
📥 Commits

Reviewing files that changed from the base of the PR and between 4ee6bfd and 2255dcb.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (4)
  • apps/server/package.json
  • apps/server/src/mcp/OrchestratorMcpToolkit.integration.test.ts
  • apps/server/src/mcp/toolkits/core.test.ts
  • patches/effect@4.0.0-rc.115.patch

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 4 remain after this review.


📝 Walkthrough

Walkthrough

The patch changes MCP tool error flags and output schemas for returned failures. Server tests check failure flags and schema validation for tool results.

Changes

MCP tool failures

Layer / File(s) Summary
Failure flags and output schemas
patches/effect@4.0.0-rc.115.patch
Tool results now set isError from the failure status. When failureMode is "return" and the success schema is an object, the output schema includes the failure schema.
Failure behavior tests
apps/server/package.json, apps/server/src/mcp/OrchestratorMcpToolkit.integration.test.ts, apps/server/src/mcp/toolkits/core.test.ts
The server adds the MCP SDK dependency. Tests check failure flags, serialized failure content, and output-schema validity for returned failures and queue-list responses.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix · Severity of issue fixed: Medium

Suggested reviewers: juliusmarminge

Merge Risk: ⚪ Minimal · up to 2255d

Declared MCP tool failures are now flagged as errors and validate against the advertised output schema. No merge-blocking risk was identified in the supplied changes.

Architecture Summary

Architecture risk: 🔵 Low · up to 2255d

The change affects 2 systems.

Changed systems: apps/server, patches

Architecture concerns
No architecture-level concerns identified.

Review details

Systems and components

  • observed — apps/server (service) was modified; 3 changed files map to changed impact.
  • observed — patches (service) was modified; 1 changed file maps to changed impact.

Before / after behavior

  • observed — Modified behavior in apps/server/package.json: Added @modelcontextprotocol/sdk at version 1.29.0 to devDependencies.
  • observed — Modified behavior in apps/server/src/mcp/OrchestratorMcpToolkit.integration.test.ts: Added imports for AJV-based JSON Schema validation and the MCP JsonSchemaType type.
  • observed — Modified behavior in apps/server/src/mcp/OrchestratorMcpToolkit.integration.test.ts: Added an assertion that the thread pin operation does not return an error.
  • observed — Modified behavior in apps/server/src/mcp/OrchestratorMcpToolkit.integration.test.ts: Added checks that a normal queue-list response and a missing-thread error conform to the tool’s output schema, while malformed queue data does not. Also asserts that queue listing and thread reading for a missing thread return MCP errors.
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The patches/effect@4.0.0-rc.115.patch changes also add HTTP session DELETE handling, cookie parsing fallback behavior, RPC request lifecycle hooks and chunk counts, and socket ping/pong hooks. The… Remove the unrelated HTTP session, cookie, RPC lifecycle, and socket ping/pong changes from the patch. Keep changes that implement MCP failure flags and success/failure output schemas.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed For #15566, the MCP result patch maps declared failures to isError: true and retains isError: false for success. It advertises the union of success and failure schemas for returned failures. Tests…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
Title check ✅ Passed The title clearly states the primary change: marking declared MCP tool failures as errors.
Description check ✅ Passed The description explains the failure-reporting problem, the regression coverage and validator dependency, links issue #15566, and gives detailed verification results, limits, and evidence. It does not…
Full details: Out of Scope Changes check

Explanation

The patches/effect@4.0.0-rc.115.patch changes also add HTTP session DELETE handling, cookie parsing fallback behavior, RPC request lifecycle hooks and chunk counts, and socket ping/pong hooks. These changes do not implement #15566’s MCP tool failure representation requirements.

  • Fix all pre-merge checks with AI
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@macroscopeapp

macroscopeapp Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at 50001d9

Macroscope's review found this PR approvable — The changes are confined to ignored test and dependency-management paths, with no production implementation, product-default, deployment, security, billing, or authentication impact. Their runtime effect is limited to verification and development tooling.

Notes:

  • No code objects were reviewed. Approvability was decided on eligibility alone.

You can add or adjust custom eligibility rules. Learn more.

Comment thread patches/effect@4.0.0-rc.115.patch Outdated
macroscopeapp[bot]
macroscopeapp Bot previously approved these changes Oct 4, 2026
@macroscopeapp
macroscopeapp Bot dismissed their stale review October 6, 2026 15:45

Dismissing prior approval to re-evaluate 50001d9

@github-actions github-actions Bot added size:XS 0-9 changed lines (additions + deletions). and removed size:L 100-499 changed lines (additions + deletions). labels Oct 6, 2026
@maria-rcks
maria-rcks merged commit dff412c into pingdotgg:main Oct 6, 2026
31 checks passed
github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 6, 2026
## What's Changed
* refactor(server,relay): webhook capabilities live in services, not handlers by @juliusmarminge in pingdotgg/t3code#16232
* fix(server): a T3 Connect preferences save finishes even if the client disconnects by @juliusmarminge in pingdotgg/t3code#16266
* refactor(server): import service modules as namespaces, not aliased layers by @juliusmarminge in pingdotgg/t3code#16267
* feat(server): log how long PR watches stay quiet before they end by @t3dotgg in pingdotgg/t3code#16262
* feat(server,web): choose where new worktrees are created by @juliusmarminge in pingdotgg/t3code#16231
* perf(server): idle status polls and PR sweeps start fewer git processes by @t3dotgg in pingdotgg/t3code#16272
* perf(server): PR watches spend ~90% fewer GitHub points by checking a 1-point fingerprint first by @t3dotgg in pingdotgg/t3code#16270
* fix(pull-requests): PR detail reads no longer drain the GitHub quota by @t3dotgg in pingdotgg/t3code#16280
* refactor: layer variables are named layer or layerXyz by @juliusmarminge in pingdotgg/t3code#16282
* refactor(server): T3 Connect link capabilities live in a CloudLink service by @juliusmarminge in pingdotgg/t3code#16265
* fix(web): sidebar drag and drop no longer snaps back by @t3dotgg in pingdotgg/t3code#16291
* fix(web): inline HTML renders no longer trap the thread's scroll by @t3dotgg in pingdotgg/t3code#16283
* refactor(server): one module per service instead of Services/ and Layers/ folders by @juliusmarminge in pingdotgg/t3code#16295
* chore(review): configure CodeRabbit in TypeScript by @esthor in pingdotgg/t3code#16281
* docs: put the Effect and web UI review rules in the docs by @esthor in pingdotgg/t3code#16286
* chore(lint): require a reason on every lint and type-checker suppression by @esthor in pingdotgg/t3code#16294
* refactor(relay): import HookInboxObject once, as a namespace by @juliusmarminge in pingdotgg/t3code#16307
* fix(web): a rejected desktop-local credential is not retried every poll by @juliusmarminge in pingdotgg/t3code#16273
* feat(desktop): the renderer's bootstrap token rotates every 12 hours by @juliusmarminge in pingdotgg/t3code#16275
* fix(web): recover from a closed IndexedDB connection by @juliusmarminge in pingdotgg/t3code#16311
* fix(relay): stop forcing manual relay deploys by default by @juliusmarminge in pingdotgg/t3code#13563
* feat(relay): measure the managed tunnel backlog by @juliusmarminge in pingdotgg/t3code#13564
* feat(relay): clean up tunnels of hosts that never registered recovery by @juliusmarminge in pingdotgg/t3code#13565
* perf(relay): delete expired tunnels four at a time within a time budget by @juliusmarminge in pingdotgg/t3code#13566
* feat(connect): tell users when an idle tunnel was removed by @juliusmarminge in pingdotgg/t3code#13567
* docs(relay): add the legacy tunnel cleanup rollout runbook by @juliusmarminge in pingdotgg/t3code#13568
* chore(review): point CodeRabbit at the web UI conventions by @esthor in pingdotgg/t3code#16324
* chore(review): turn off CodeRabbit's docstring coverage check by @esthor in pingdotgg/t3code#16328
* refactor(server): CloudLink keeps only the link lifecycle; pure checks live beside it by @juliusmarminge in pingdotgg/t3code#16340
* refactor(server): CloudLink fails with its own errors; the connect routes map them to HTTP by @juliusmarminge in pingdotgg/t3code#16341
* refactor(server): replay guards stay in CloudLink by @juliusmarminge in pingdotgg/t3code#16349
* fix(server): forks no longer merge into their upstream repo's project group by @t3dotgg in pingdotgg/t3code#16353
* fix(server): stop the startup project sync from delaying the app window by @Mnigos in pingdotgg/t3code#14912
* fix(web): avoid blocking image preparation conversions by @Bil0000 in pingdotgg/t3code#13342
* fix(server): return partial workspace index on timeout by @Michel-Liao in pingdotgg/t3code#11500
* fix(server): probe project favicon candidates concurrently by @ishaanko in pingdotgg/t3code#12543
* fix(observability): a failing trace disk no longer stalls the server by @t3dotgg in pingdotgg/t3code#13758
* fix(server): status polling no longer locks the git index by @ahalekelly in pingdotgg/t3code#14718
* perf(shared): scan PATH once per command before spawning, not on every spawn by @SkiTee3000 in pingdotgg/t3code#12600
* fix(server): main's startup auto-pull test compiles again by @t3dotgg in pingdotgg/t3code#16357
* fix(server): project favicons stop being rescanned every minute by @t3dotgg in pingdotgg/t3code#16206
* fix(server): Claude limits load again for users with large transcript histories by @t3dotgg in pingdotgg/t3code#16358
* fix(server): caches and ids are written atomically by @juliusmarminge in pingdotgg/t3code#16242
* fix(server): one-shot initializers no longer race by @juliusmarminge in pingdotgg/t3code#16260
* fix(server): the PR cache sweep only removes real entry files by @juliusmarminge in pingdotgg/t3code#16285
* chore: keep one copy each of undici 8 and ws 8 by @juliusmarminge in pingdotgg/t3code#16211
* fix(shared): DrainableWorker keeps running after a failed item by @juliusmarminge in pingdotgg/t3code#16223
* fix(server): metrics count interrupted work on the monotonic clock by @juliusmarminge in pingdotgg/t3code#16207
* refactor(web): import connection storage as a namespace in its test by @juliusmarminge in pingdotgg/t3code#16315
* fix(contracts): trimmed IDs round-trip by @juliusmarminge in pingdotgg/t3code#16300
* fix(server): main's settings, keybindings and session tests compile again by @juliusmarminge in pingdotgg/t3code#16363
* chore(lint): catch known tags with Effect.catchTags by @esthor in pingdotgg/t3code#16361
* fix(observability): T3 Connect tracing stops at the relay boundary by @juliusmarminge in pingdotgg/t3code#16314
* fix(relay): error and deadline responses carry CORS headers by @juliusmarminge in pingdotgg/t3code#16253
* fix(web): bring back the live shimmer on work log rows by @juliusmarminge in pingdotgg/t3code#16372
* refactor: Effect code gets UUIDs and SHA-256 from Effect's Crypto by @esthor in pingdotgg/t3code#16377
* fix(relay): export traces through one tracer, one request span each by @juliusmarminge in pingdotgg/t3code#16382
* fix(server): Pi thread titles use linked PR context by @juliusmarminge in pingdotgg/t3code#16210
* fix(desktop): retry transient bearer bootstrap and degrade on session fetch failure by @jamesvillarrubia in pingdotgg/t3code#12919
* fix(server): avoid scanning completed history for pending secrets by @Yash-Singh1 in pingdotgg/t3code#16409
* fix(orchestration-v2): let Stop recover stalled runs by @Yash-Singh1 in pingdotgg/t3code#15442
* fix(release): resolve version-qualified catalog overrides by @Yash-Singh1 in pingdotgg/t3code#16411
* fix(web): type in front of bold that starts a composer line by @saphid in pingdotgg/t3code#13217
* fix(desktop): prevent browser screenshot filename collisions by @saphid in pingdotgg/t3code#14784
* fix(server): end clone options before the repository URL by @saphid in pingdotgg/t3code#14781
* fix(web): queued messages no longer split the composer notice stack by @tristanmanchester in pingdotgg/t3code#16400
* fix(server): reject invalid explicit Bitbucket repositories by @aravhawk in pingdotgg/t3code#15876
* fix: restore desktop and server typechecks on main by @Yash-Singh1 in pingdotgg/t3code#16415
* fix(shared): find versioned JetBrains macOS app bundles by @Sypher760-gif in pingdotgg/t3code#16246
* fix(server): OpenCode 2 threads get T3 Code's MCP tools by @nkoynov in pingdotgg/t3code#16142
* feat(preview): run the browser on the environment server by @maria-rcks in pingdotgg/t3code#15328
* fix: restore service references breaking ci by @maria-rcks in pingdotgg/t3code#16495
* fix(mcp): mark declared tool failures as errors by @maria-rcks in pingdotgg/t3code#15617
* fix(release): unblock nightly browser tests and cli builds by @maria-rcks in pingdotgg/t3code#16515

## New Contributors
* @esthor made their first contribution in pingdotgg/t3code#16281
* @ahalekelly made their first contribution in pingdotgg/t3code#14718
* @SkiTee3000 made their first contribution in pingdotgg/t3code#12600
* @jamesvillarrubia made their first contribution in pingdotgg/t3code#12919
* @Sypher760-gif made their first contribution in pingdotgg/t3code#16246
* @nkoynov made their first contribution in pingdotgg/t3code#16142

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261005.2702...v0.0.46-nightly.20261006.2735

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261006.2735
github-actions Bot added a commit to davidvanderklay/t3code-flake that referenced this pull request Oct 6, 2026
## What's Changed
* refactor(server,relay): webhook capabilities live in services, not handlers by @juliusmarminge in pingdotgg/t3code#16232
* fix(server): a T3 Connect preferences save finishes even if the client disconnects by @juliusmarminge in pingdotgg/t3code#16266
* refactor(server): import service modules as namespaces, not aliased layers by @juliusmarminge in pingdotgg/t3code#16267
* feat(server): log how long PR watches stay quiet before they end by @t3dotgg in pingdotgg/t3code#16262
* feat(server,web): choose where new worktrees are created by @juliusmarminge in pingdotgg/t3code#16231
* perf(server): idle status polls and PR sweeps start fewer git processes by @t3dotgg in pingdotgg/t3code#16272
* perf(server): PR watches spend ~90% fewer GitHub points by checking a 1-point fingerprint first by @t3dotgg in pingdotgg/t3code#16270
* fix(pull-requests): PR detail reads no longer drain the GitHub quota by @t3dotgg in pingdotgg/t3code#16280
* refactor: layer variables are named layer or layerXyz by @juliusmarminge in pingdotgg/t3code#16282
* refactor(server): T3 Connect link capabilities live in a CloudLink service by @juliusmarminge in pingdotgg/t3code#16265
* fix(web): sidebar drag and drop no longer snaps back by @t3dotgg in pingdotgg/t3code#16291
* fix(web): inline HTML renders no longer trap the thread's scroll by @t3dotgg in pingdotgg/t3code#16283
* refactor(server): one module per service instead of Services/ and Layers/ folders by @juliusmarminge in pingdotgg/t3code#16295
* chore(review): configure CodeRabbit in TypeScript by @esthor in pingdotgg/t3code#16281
* docs: put the Effect and web UI review rules in the docs by @esthor in pingdotgg/t3code#16286
* chore(lint): require a reason on every lint and type-checker suppression by @esthor in pingdotgg/t3code#16294
* refactor(relay): import HookInboxObject once, as a namespace by @juliusmarminge in pingdotgg/t3code#16307
* fix(web): a rejected desktop-local credential is not retried every poll by @juliusmarminge in pingdotgg/t3code#16273
* feat(desktop): the renderer's bootstrap token rotates every 12 hours by @juliusmarminge in pingdotgg/t3code#16275
* fix(web): recover from a closed IndexedDB connection by @juliusmarminge in pingdotgg/t3code#16311
* fix(relay): stop forcing manual relay deploys by default by @juliusmarminge in pingdotgg/t3code#13563
* feat(relay): measure the managed tunnel backlog by @juliusmarminge in pingdotgg/t3code#13564
* feat(relay): clean up tunnels of hosts that never registered recovery by @juliusmarminge in pingdotgg/t3code#13565
* perf(relay): delete expired tunnels four at a time within a time budget by @juliusmarminge in pingdotgg/t3code#13566
* feat(connect): tell users when an idle tunnel was removed by @juliusmarminge in pingdotgg/t3code#13567
* docs(relay): add the legacy tunnel cleanup rollout runbook by @juliusmarminge in pingdotgg/t3code#13568
* chore(review): point CodeRabbit at the web UI conventions by @esthor in pingdotgg/t3code#16324
* chore(review): turn off CodeRabbit's docstring coverage check by @esthor in pingdotgg/t3code#16328
* refactor(server): CloudLink keeps only the link lifecycle; pure checks live beside it by @juliusmarminge in pingdotgg/t3code#16340
* refactor(server): CloudLink fails with its own errors; the connect routes map them to HTTP by @juliusmarminge in pingdotgg/t3code#16341
* refactor(server): replay guards stay in CloudLink by @juliusmarminge in pingdotgg/t3code#16349
* fix(server): forks no longer merge into their upstream repo's project group by @t3dotgg in pingdotgg/t3code#16353
* fix(server): stop the startup project sync from delaying the app window by @Mnigos in pingdotgg/t3code#14912
* fix(web): avoid blocking image preparation conversions by @Bil0000 in pingdotgg/t3code#13342
* fix(server): return partial workspace index on timeout by @Michel-Liao in pingdotgg/t3code#11500
* fix(server): probe project favicon candidates concurrently by @ishaanko in pingdotgg/t3code#12543
* fix(observability): a failing trace disk no longer stalls the server by @t3dotgg in pingdotgg/t3code#13758
* fix(server): status polling no longer locks the git index by @ahalekelly in pingdotgg/t3code#14718
* perf(shared): scan PATH once per command before spawning, not on every spawn by @SkiTee3000 in pingdotgg/t3code#12600
* fix(server): main's startup auto-pull test compiles again by @t3dotgg in pingdotgg/t3code#16357
* fix(server): project favicons stop being rescanned every minute by @t3dotgg in pingdotgg/t3code#16206
* fix(server): Claude limits load again for users with large transcript histories by @t3dotgg in pingdotgg/t3code#16358
* fix(server): caches and ids are written atomically by @juliusmarminge in pingdotgg/t3code#16242
* fix(server): one-shot initializers no longer race by @juliusmarminge in pingdotgg/t3code#16260
* fix(server): the PR cache sweep only removes real entry files by @juliusmarminge in pingdotgg/t3code#16285
* chore: keep one copy each of undici 8 and ws 8 by @juliusmarminge in pingdotgg/t3code#16211
* fix(shared): DrainableWorker keeps running after a failed item by @juliusmarminge in pingdotgg/t3code#16223
* fix(server): metrics count interrupted work on the monotonic clock by @juliusmarminge in pingdotgg/t3code#16207
* refactor(web): import connection storage as a namespace in its test by @juliusmarminge in pingdotgg/t3code#16315
* fix(contracts): trimmed IDs round-trip by @juliusmarminge in pingdotgg/t3code#16300
* fix(server): main's settings, keybindings and session tests compile again by @juliusmarminge in pingdotgg/t3code#16363
* chore(lint): catch known tags with Effect.catchTags by @esthor in pingdotgg/t3code#16361
* fix(observability): T3 Connect tracing stops at the relay boundary by @juliusmarminge in pingdotgg/t3code#16314
* fix(relay): error and deadline responses carry CORS headers by @juliusmarminge in pingdotgg/t3code#16253
* fix(web): bring back the live shimmer on work log rows by @juliusmarminge in pingdotgg/t3code#16372
* refactor: Effect code gets UUIDs and SHA-256 from Effect's Crypto by @esthor in pingdotgg/t3code#16377
* fix(relay): export traces through one tracer, one request span each by @juliusmarminge in pingdotgg/t3code#16382
* fix(server): Pi thread titles use linked PR context by @juliusmarminge in pingdotgg/t3code#16210
* fix(desktop): retry transient bearer bootstrap and degrade on session fetch failure by @jamesvillarrubia in pingdotgg/t3code#12919
* fix(server): avoid scanning completed history for pending secrets by @Yash-Singh1 in pingdotgg/t3code#16409
* fix(orchestration-v2): let Stop recover stalled runs by @Yash-Singh1 in pingdotgg/t3code#15442
* fix(release): resolve version-qualified catalog overrides by @Yash-Singh1 in pingdotgg/t3code#16411
* fix(web): type in front of bold that starts a composer line by @saphid in pingdotgg/t3code#13217
* fix(desktop): prevent browser screenshot filename collisions by @saphid in pingdotgg/t3code#14784
* fix(server): end clone options before the repository URL by @saphid in pingdotgg/t3code#14781
* fix(web): queued messages no longer split the composer notice stack by @tristanmanchester in pingdotgg/t3code#16400
* fix(server): reject invalid explicit Bitbucket repositories by @aravhawk in pingdotgg/t3code#15876
* fix: restore desktop and server typechecks on main by @Yash-Singh1 in pingdotgg/t3code#16415
* fix(shared): find versioned JetBrains macOS app bundles by @Sypher760-gif in pingdotgg/t3code#16246
* fix(server): OpenCode 2 threads get T3 Code's MCP tools by @nkoynov in pingdotgg/t3code#16142
* feat(preview): run the browser on the environment server by @maria-rcks in pingdotgg/t3code#15328
* fix: restore service references breaking ci by @maria-rcks in pingdotgg/t3code#16495
* fix(mcp): mark declared tool failures as errors by @maria-rcks in pingdotgg/t3code#15617
* fix(release): unblock nightly browser tests and cli builds by @maria-rcks in pingdotgg/t3code#16515

## New Contributors
* @esthor made their first contribution in pingdotgg/t3code#16281
* @ahalekelly made their first contribution in pingdotgg/t3code#14718
* @SkiTee3000 made their first contribution in pingdotgg/t3code#12600
* @jamesvillarrubia made their first contribution in pingdotgg/t3code#12919
* @Sypher760-gif made their first contribution in pingdotgg/t3code#16246
* @nkoynov made their first contribution in pingdotgg/t3code#16142

**Full Changelog**: pingdotgg/t3code@v0.0.46-nightly.20261005.2702...v0.0.46-nightly.20261006.2735

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.46-nightly.20261006.2735
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Typed MCP tool failures return isError:false and violate the advertised success schema

1 participant