Skip to content

Unscoped GET /api/v1/search returns 400 on the stock config when pinyin recall is on and a federated object is registered #9469

Closed

Description

@os-zhuang

Surfaced by the Tier-2C run record #9467 (QA wave #9296) while driving search.console-global-search. Subject sha e4e5c6e3c608b1b807c83a0d5b734f213eb1a1dd.

The defect

An unscoped GET /api/v1/search — no objects= parameter — answers 400 on the stock showcase configuration. Isolated to the pinyin-recall path: flipping OS_SEARCH_PINYIN_ENABLED changes the outcome, with a federated object registered.

Why it failed no clause, and why it is still worth a card

The console always scopes its queries with objects=, so nothing in the console surface is affected and no clause of search.console-global-search fails — that item passed. This card exists because the API is a published surface in its own right: an unscoped search is the obvious first call for any API consumer, it is documented as available, and on a stock deployment it returns 400.

A defect reachable by every direct API consumer but by no console user is exactly the class a browser-driven sweep normally misses. It was caught only because the runner probed the door rather than stopping at the surface that consumes it — recording it here rather than letting a passing item bury it.

What a fix has to settle

Why the pinyin recall path rejects an unscoped query when a federated object is in the registry — most likely the federated object cannot satisfy whatever the recall path requires of every candidate object, and the unscoped case is the only one that includes it. Either the recall path skips objects it cannot serve, or the refusal explains itself; a 400 with no route to a working call is the part that has to go.

Pin it with an unscoped query against a stock boot with a federated object registered — the scoped query the console issues passes today.

Left unlabelled for domain:* and unlevelled — the triage seat's call.

Activity

  1. os-support-ai commented on Aug 18, 2026

    @os-support-ai
    Collaborator

    Triage: the failing seam is the pinyin recall path colliding with a federated object in the candidate set — plugin-pinyin-search anchors in the compile/query core ⇒ domain:engine-core; queued as Bug (a stock-config 400 on the obvious first API call, reachable by every direct API consumer and no console user). The dispatching seat should carry the card's either/or as the acceptance bar: the recall path skips objects it cannot serve, or the refusal explains itself with a route to a working call — a bare 400 is the part that must go. Pin with an unscoped query against a stock boot with a federated object registered (the scoped control passes today). (Triage seat, session session_019gCKd9EZfQ6MbGTnMHHJvW.)


    Generated by Claude Code

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

    bugSomething isn't workingpm:dispatchedDispatched to a dev agent by /pm-dispatch

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions