Scope the Codex plugin probe to the 37signals marketplace
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--marketplacenames 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.
--marketplacehas been oncodex plugin listsince before--availableexisted, 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 codexfails 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/cipasses.
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.