You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The federation spelling forwards ?schema=; the admin spelling does not read the query at all, so a caller that passes ?schema=public to it silently gets the unfiltered result rather than an error or the filtered set.
The same twin relationship holds for generateObjectDraft (POST /:name/object-draft vs POST /:name/external/tables/:remote/draft), which does forward its options bag — so this divergence is specific to the schema filter on the listing route.
The twins are known and deliberate: #4249 reconciled their failure contract ("One operation, one failure contract now, on both paths", external-datasource-routes.ts) rather than removing either. #7744 ledgered the admin spelling at its live path and was explicitly scoped away from renaming or removing a live route. What #4249 reconciled was the error path; the request path was never compared, and this is the residue.
Options
Forward req.query.schema on the admin route so the twins accept the same request shape (smallest change; makes the paths interchangeable, which is what "one operation" implies).
Leave it, and record the divergence as intended — in which case the admin route arguably ought to refuse an unsupported query parameter rather than ignore it, since silently dropping a filter is the "declared ≠ enforced" shape (Prime Directive chore: version packages #10).
Not fixed in #7744 because either option changes request-handling behaviour on a live route, which that card ruled out of scope.
Reproduction
GET /api/v1/datasources/<name>/remote-tables?schema=public and GET /api/v1/datasources/<name>/external/tables?schema=public against the same datasource: the second is filtered, the first is not.
Symptom
IExternalDatasourceService.listRemoteTablesis reachable through two live routes:GET /api/v1/datasources/:name/external/tablespackages/rest/src/external-datasource-routes.tslistRemoteTables(name, { schema })GET /api/v1/datasources/:name/remote-tablespackages/services/service-datasource/src/admin-routes.tslistRemoteTables(name)The federation spelling forwards
?schema=; the admin spelling does not read the query at all, so a caller that passes?schema=publicto it silently gets the unfiltered result rather than an error or the filtered set.The same twin relationship holds for
generateObjectDraft(POST /:name/object-draftvsPOST /:name/external/tables/:remote/draft), which does forward its options bag — so this divergence is specific to theschemafilter on the listing route.Why this is a finding and not part of #7744
The twins are known and deliberate: #4249 reconciled their failure contract ("One operation, one failure contract now, on both paths",
external-datasource-routes.ts) rather than removing either. #7744 ledgered the admin spelling at its live path and was explicitly scoped away from renaming or removing a live route. What #4249 reconciled was the error path; the request path was never compared, and this is the residue.Options
req.query.schemaon the admin route so the twins accept the same request shape (smallest change; makes the paths interchangeable, which is what "one operation" implies).Not fixed in #7744 because either option changes request-handling behaviour on a live route, which that card ruled out of scope.
Reproduction
GET /api/v1/datasources/<name>/remote-tables?schema=publicandGET /api/v1/datasources/<name>/external/tables?schema=publicagainst the same datasource: the second is filtered, the first is not.