Uh oh!
There was an error while loading. Please reload this page.
docs(api): document the repeated-filter refusal on GET /data/:object - #8142
Merged
Merged
Conversation
`content/docs/api/data-api.mdx` documents the `filter` parameter's rejection behaviour, but named only malformed JSON as a cause of `400 INVALID_FILTER`. PR #8004 (#7390) shipped a second cause on the same slot: sending one spelling more than once. The page was incomplete, not wrong — the malformed-JSON sentence stays as it was. - the `filter` table row now names repetition alongside malformed JSON - the "a filter either applies or fails" table gains the repetition row, quoting the shipped message from `repeatedFilterParamMessage()` - one paragraph carries the shipped reasoning: a repeat is neither merged nor resolved by precedence, and repetition is counted rather than compared, so a one-element array from a repeat-preserving adapter is still one occurrence Docs-only; no published package changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BgZEGQqkLtHZBKrP2ceDwA
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
hotlong
marked this pull request as ready for review
August 12, 2026 18:19
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#8005
content/docs/api/data-api.mdxis the page that documents thefilterquery parameter and its rejection behaviour specifically, but it named only one cause of400 INVALID_FILTER: malformed JSON. PR #8004 (#7390) shipped a second cause on the same slot — sending one spelling more than once — and the page never caught up.The page was incomplete, not wrong. Nothing there claimed malformedness was the only cause, so the malformed-JSON sentence at
:22and the drop-vs-fail reasoning at:68are both left standing; the new cause is added alongside them.What changed
Docs-only, one file, 10 insertions / 1 deletion.
filtertable row now names repetition next to malformed JSON, and says it is refused as a repetition rather than diagnosed as malformed — which is the point of finding: a repeated?filter=onGET /data/:objectcannot be told from a filter AST, so it is diagnosed as a malformed filter (and, rarely, succeeds) #7390 rather than a wording preference.Repeated "filter" query parameter — send exactly one.Written from the source, not from the card
Every claim was read off
packages/rest/src/query-multiplicity.tsonmain, not paraphrased:repeatedFilterParamMessage()(:191);400/INVALID_FILTER, flatmapDataErrorbody) fromassertFilterParamSuppliedOnce()and the assertions inrest-server-repeated-filter-param.test.ts;readSingleQueryValue()and the preservation cases in that same test.Repeated "filter"returns zero hits and reads as "the feature is absent". Grep the identifier (repeatedFilterParamMessage), not the message.Judgment call: naming one spelling or all four
The gate is generic over all four wire spellings —
where/filter/filters/$filter, confirmed asFILTER_SLOT_QUERY_PARAMScomposed from the spec'sRPC_QUERY_ALIAS_SLOTS(where+ aliasfilter) plus the two wire-only spellings.I named
filteralone in the table row, whose subject isfilter, and carried the generality in the prose paragraph instead — the section it sits in already opens by declaring the four spellings to be one slot, so restating the list in the row would duplicate a fact the page states 45 lines below. The paragraph says "in any of the four spellings" and points at that existing sentence rather than competing with it.Also deliberately scoped: the paragraph names
GET /data/:object, becauseassertFilterParamSuppliedOncehas exactly one call site and the export route'sorderbyis not covered by it. It is placed after the pre-existing "the same rule applies toorderby" line so that sentence keeps its original antecedent.Verification
No code changed, so there is nothing to test; the docs gates are the verification. All green locally, run against the actual changed path after re-deriving with
node scripts/pm/dispatch-gates.mjs content/docs/api/data-api.mdx:check:nul-bytescheck:doc-authoringcheck:doc-anchorscheck:docs-audit-scopecheck:quick-reference-countscheck:role-wordcheck:doc-formula-expressionsThe last four were not in the dispatch prompt's list; the re-derivation surfaced them and they are reported here for that reason.
Labels and scope
skip-changeset— docs ship in no published package.⛔ No
packages/**in this diff: the code is correct and shipped, and this is prose catching up to it.Sibling findings referenced but not addressed here — out of scope: #8001, #8002, #8003. #7967 remains open: this card re-witnesses the same docs-drift blindness (the checker maps docs to packages by textual mention, so a page describing a package's behaviour without naming it is invisible), and the triage comment already recorded it there rather than filing a new card.
Generated by Claude Code