From d3d4d6a43fa8d21c4fc200b318e68b463efca68b Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 12 Aug 2026 18:10:55 +0000 Subject: [PATCH] docs(metadata-protocol): fix stale where-slot arity note in ARRAY_VALUED_QUERY_SLOTS docblock The where row's last sentence described isFilterAST failing as if it were the correct refusal (it produces malformedFilterArrayError, a 400 telling a caller whose filters were each well-formed that their filter is malformed), and was stale for the route it described: #7390 moved arity judgement for this slot to the REST querystring ingress (assertFilterParamSuppliedOnce), so a repeated ?filter= on GET /data/:object no longer reaches this block. Also names the sharper half of #7390: ?filter=status&filter=%3D&filter=open spells a valid AST and succeeds with a filter nobody expressed. Comment-only, zero runtime change. Fixes #8003 Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01AmES43BMDg4bPrxTdi5q7t --- packages/metadata-protocol/src/protocol.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/metadata-protocol/src/protocol.ts b/packages/metadata-protocol/src/protocol.ts index 544a80b7e0..4b37d4b689 100644 --- a/packages/metadata-protocol/src/protocol.ts +++ b/packages/metadata-protocol/src/protocol.ts @@ -1747,8 +1747,13 @@ const WIRE_DOLLAR_ALIASES: readonly (readonly [string, string])[] = [ * and the array from either slot. * - `where` — a FILTER AST is an array (`['status','=','open']`), so a * blanket arity refusal here would reject the AST body form - * outright. A repeated `?filter=` is still refused, one - * block down, by `isFilterAST` failing to read it. + * outright. Arity for this slot is judged one layer up, at + * the REST querystring ingress (`assertFilterParamSuppliedOnce`, + * #7390) — the only layer that knows an array on this wire + * is a repetition and can be nothing else. A repeated + * `?filter=` never reaches this block on `GET /data/:object`; + * worse, `?filter=status&filter=%3D&filter=open` spells a + * valid AST and succeeds with a filter nobody expressed. * - `groupBy` — `z.array(GroupByNodeSchema)`. * - `aggregations` — `z.array(AggregationNodeSchema)`. * - `joins` / `windowFunctions` — retired ARRAY keys (#4286). The tombstone,