Repository navigation
docs(deployment): validating-metadata.mdx names the driver refusal, not the swallowed empty list - #20484
Merged
objectstack-fleet[bot] merged 1 commit intoSep 28, 2026
Conversation
…ot the swallowed empty list The filter-position passage said the driver's "no such column" is swallowed and the list comes back empty. driver-sql, and the local faces of TursoDriver/SqliteWasmDriver (both extend SqlDriver), have refused an unresolvable WHERE column with INVALID_FILTER / 400, naming the column, since #8790. The Turso remote face refuses the same way as of 3e8b492 (#20461), through the inherited aggregateBackendFault seam. Rewrote the passage to the refusal and its remedy (schema sync, or naming a column the table has), and reworded the "why an error not a warning" rationale to match. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VDtqoecgES7ScQYGbFVDRv
objectstack-fleet
Bot
deleted the
claude/issue-20468-missing-column-refused
branch
September 28, 2026 17:53
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 free
to 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 #20468
Clause-②: no
What changed
content/docs/deployment/validating-metadata.mdx(the filter-position passage,:381-:385after edit) said an unknown column in a predicate has the driver's "no such column" swallowed, so the query answers an empty list indistinguishable from "there is no data". That is false on the SQL family:driver-sql, and the local faces ofTursoDriver/SqliteWasmDriver(bothextends SqlDriver), refuse an unresolvable WHERE column withINVALID_FILTER/ 400, naming the column, since #8790. The Turso remote face now refuses the same way, as of3e8b492d28(#20461), routed through the same inheritedaggregateBackendFaultseam.Before
After
Why (measured on
origin/main, base8e02859185)find()/findOne()/count()all reachunresolvableFilterColumnError(INVALID_FILTER/400, naming the column) viaSqlDriver.findRows's recovery ladder andSqlDriver.count—packages/drivers/driver-sql/src/sql-driver.ts:837,:709.aggregate()reaches the same envelope throughaggregateBackendFault(sql-driver.ts:10382), which attributes the unresolved column to whichever clause named it: agroupBy/aggregationfieldanswersINVALID_FIELD/400 (unresolvableAggregateColumnRefusal,sql-driver.ts:10403+), and a bare WHERE column falls to the sameINVALID_FILTER/400 as the other three doors.driver-sqlis the base.TursoDriver(packages/drivers/driver-turso/src/turso-driver.ts:1400) andSqliteWasmDriver(packages/drivers/driver-sqlite-wasm/src/sqlite-wasm-driver.ts:67) bothextends SqlDriver, so their local faces inherit the refusal unchanged. The Turso remote face refuses too, as of commit3e8b492d28(fix(driver-turso): the remote face refuses a missing table or column with the local face's code instead of answering [] #20461/driver-turso remote:aggregate/findanswer[]for a missing table or a missing column, where the local face refuses DATABASE_ERROR / 500 or INVALID_FIELD / INVALID_FILTER / 400 (the #8790 shape on the remote transport) #20424):remoteReadExit/remoteReadFault(turso-driver.ts:2077-2149) call the same inheritedaggregateBackendFault, sofind/findOne/count/aggregateover the remote transport answer identically to the local face for this condition.unresolvableColumnNameOf(sql-driver.ts:777) extracts the column name from the dialect message via regex andunresolvableFilterColumnError/unresolvableAggregateColumnRefusalput that name in the caller-facing message. What does not reach the caller is the full compiled statement text with bound literals inlined (sql-driver.ts:766-774,#7929); that stays in the server log only. fix(driver-turso): the remote face refuses a missing table or column with the local face's code instead of answering [] #20461's own docblock (turso-driver.ts:2059) says the same for the remote face: "the dialect text stays in the server log ... under a non-enumerablecause". I read this as: the column NAME is disclosed to the caller; the raw dialect prose is not — which is what the new passage says.#3821ladder, confirmed by fix(driver-turso): the remote face refuses a missing table or column with the local face's code instead of answering [] #20461's H1 table: localfindprojecting → rows,findordered by → rows unordered; remote now matches via the same two ladder rungs). Neitherdata-modeling/queries.mdxnorreferences/api/sortability.mdxwas touched.driver-sql,driver-turso,driver-sqlite-wasm) as the card and triage direct;driver-memory/driver-mongodbwere not measured for this condition and are not claimed.Tests
Docs-only change; no test suite applies. Derived 40 command(s) via
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsagainst merge-base8e0285918oforigin/main; all 40 run, all exit 0 on heade9868a7e89(after a requiredpnpm install+pnpm --filter @objectstack/spec build+pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint --filter=@objectstack/client-react --filter=@objectstack/clientto clear fourPREREQUISITE NOT METgates that read builtdist/).node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran <list>reconciles: "40 derived, 40 run, 0 NOT-MEASURED, 0 UNRUN".pnpm check:nul-bytesandpnpm check:role-wordre-run clean on the amended heade9868a7e89. No changeset:content/docs/**is served by@objectstack/docs, a"private": truepackage — fast-track, not published.Generated by Claude Code