Scope the Codex plugin probe to the 37signals marketplace

Merged
RO
14h ago
+16-10

Why

On a new machine with Codex signed in, basecamp setup codex installs the plugin and then reports "Cannot query Codex plugins". basecamp doctor reports the same thing every time it runs afterward (card). The probe runs codex plugin list --available --json. When Codex is signed in, that command first fetches OpenAI's remote plugin catalog, which takes about 35 seconds on a cold cache. Our 5 second deadline stops Codex before it saves that catalog, so the cache never warms and every later probe times out too.

What changed

  • The probe asks for the 37signals marketplace only (--marketplace 37signals). Codex skips the remote catalog whenever --marketplace names a local marketplace (source).
  • The hint in doctor shows the same command.
  • The test stub of Codex answers only the scoped listing, like a signed-in Codex does when the deadline expires.

Scope

  • Covers setup verification, the doctor checks and the legacy-ID check. All three share one probe.
  • --marketplace has been on codex plugin list since before --available existed, so any Codex that ran the old probe also runs this one.

Verification

  • On a fresh HOME with Codex signed in and nothing cached: on main, basecamp setup codex fails after 18s with "Cannot query Codex plugins", and doctor fails both Codex checks. On this branch, setup succeeds in 3s, and doctor shows "Installed and enabled" and "Up to date (0.22.0)".
  • Before setup, doctor on this branch still reports "Plugin not installed". Codex returns empty lists for a marketplace that has not been added.
  • The first commit adds the stubbed tests and fails with the error from the card. The second commit makes them pass. bin/ci passes.

Summary by cubic

Fixes the Codex plugin probe timing out on machines with Codex signed in by scoping the query to the 37signals marketplace.

The probe previously ran codex plugin list --available --json, which fetches OpenAI's remote plugin catalog (~35s on a cold cache) and exceeds the 5s deadline, so setup and doctor always failed with "Cannot query Codex plugins". Now the probe passes --marketplace 37signals, which skips the remote catalog and returns in milliseconds. The failure hint shows the same scoped command, and the test stub now answers only the scoped listing.