Skip to content

[Bug]: Stale ACP registry cache pins Factory Droid to 0.233.0, whose session/new crashes on any mcpServers; no update surfaced #18305

Closed

Description

@joca-immersa

Summary

T3 keeps Factory Droid pinned to 0.233.0 via a stale cached ACP registry index, and 0.233.0 cannot open any session through T3 because its session/new worker crashes whenever mcpServers is non-empty — which it always is, since T3 attaches its t3-code bridge. The live registry already lists 0.238.0, in which I verified the full session-open sequence works. Nothing in T3 refreshes the index or tells the user an update exists, and the failure message hides the actual cause.

Environment

  • T3 Code (Nightly) desktop 0.0.46-nightly.20261011.2980, macOS arm64
  • Managed install: droid@0.233.0 at ~/.t3/tools/factory-droid/0.233.0
  • Local index cache ~/.t3/caches/acp-registry/registry.json dated Oct 5 → factory-droid 0.233.0; live index at https://cdn.agentclientprotocol.com/registry/v1/latest/registry.json → factory-droid 0.238.0 (checked Oct 11)

Evidence (all reproduced locally)

  1. delegate_task with acpRegistry_factory_droid fails with Failed to open acpRegistry provider session .... Provider log shows initialize: succeeded, then session/new: failed (errorTag: AcpRequestError) retried 5x. Droid's own log (~/.factory/logs/console.log) shows the real cause: Droid process exited unexpectedly (exit code 1).
  2. Replaying the exact captured session/new (cwd + the single t3-code acp-mcp-bridge entry) against the managed 0.233.0 binary reproduces the exit-1 crash. mcpServers: [] succeeds. A trivial self-written stdio MCP server also crashes it — so this is not about the bridge, cwd, auth, or skills; 0.233.0 cannot handle any mcpServers.
  3. Same payloads against droid 0.238.0 (from Factory.app): session/new succeeds, and session/set_config_option for model, reasoning_effort, autonomy_level all return proper configOptions (i.e. the [Bug]: Factory Droid sessions fail for every selected model because session/set_config_option returns no configOptions #16454 bug is also fixed there).
  4. Manually upgrading T3's managed copy to 0.238.0 gets reverted within a minute: readPackageReceipt enforces installed-manifest == pinned version, so local upgrades cannot stick.

Relevant code (main)

  • packages/provider-acp-registry/src/server/AcpRegistrySupport.ts: loadRegistry is cache-first (loadCachedRegistry, ~line 874); only the search/add-update flows call refreshRegistry (~lines 1577, 1622). Session open therefore keeps resolving the stale pin.
  • packages/provider-acp/src/server/adapter.ts: acpMcpContext (~line 680) attaches the bridge to every session with an MCP credential, so the 0.233.0 crash is unavoidable on the pinned version.
  • ProviderSessionManagerV2LayerOptions.configureMcp is test-only; there is no user-facing way to omit the bridge.

Related

Ask

  1. Refresh the ACP registry index on the existing provider-update-check cadence (or at least when opening a registry-agent session finds a skew), and surface registry-agent updates in Settings → Providers. The supported recovery today (provider update/reinstall, which hits prepare → refreshRegistry) is undiscoverable.
  2. Include the underlying provider reason in Provider session failed to open errors (per fix(server): provider session failures show the provider's reason #14969).

Workaround for other readers

Settings → Providers → Factory Droid → update/reinstall, so T3 fetches the current index and installs droid@0.238.0. Verified at the protocol level; droid CLI auth itself is fine (droid doctor passes).

Activity

  1. joca-immersa commented on Oct 11, 2026

    @joca-immersa
    Author

    Verified the workaround end-to-end: removed and re-added the Factory Droid provider in Settings → Providers. T3 fetched the current index and installed droid@0.238.0 (cache now reports 0.238.0). A delegated droid subagent (auto model) completed successfully with the expected reply. So the re-add/update flow does heal this — the remaining asks above are just about making that update discoverable/automatic and surfacing the underlying reason.

  2. juliusmarminge commented on Oct 11, 2026

    @juliusmarminge
    Member

    Note

    Grok responding on behalf of Julius.

    Closing this with the workaround you already found: Settings → Providers → Factory Droid → update/reinstall. That runs prepare, which calls refreshRegistry() and installs the current registry version (droid 0.238.0 today). Opening a session reads the cached index on purpose (loadRegistry is cache-first in AcpRegistrySupport.ts), and the receipt check pins the managed install to the registry version, so a manual upgrade gets replaced by design.

    The 0.233.0 mcpServers crash is a Droid bug, and Factory already fixed it upstream. The other two asks are tracked elsewhere:

    If update/reinstall still leaves you on 0.233.0, comment here and we'll reopen.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requestedvia-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions