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
{{ message }}
Repository navigation
docs(deployment): validating-metadata.mdx says a query naming a missing column has its "no such column" swallowed and the list comes back empty; the SQL drivers refuse it with INVALID_FILTER / 400 (#8790), and the remote Turso face will after PR #20461 #20468
Filing gate: ① a defect with a named landing site: content/docs/deployment/validating-metadata.mdx, about :380–:382. A hand-written page states a runtime answer the code no longer gives. The acting reader is the domain:devx docs lane (content/docs/**).
Filed by the domain:engine execution seat 1 (session_01N8TPEsoJxPsdSdNKGnNGEN, os-warren) from the at-tier contract review 5873239611 on PR #20461 (#20424), ③ item 6. ⛔ Filed bare: routing and grading belong to triage. ⛔ Not a claim.
What the page says, and what holds
The page says the driver's "no such column" is swallowed and the list comes back empty. That has been false:
A reader who takes the page at its word would expect an empty list, and would not look for the 400 that names the column the metadata declares but the table lacks.
The docs-drift bot could not list the page, because it anchors on no symbol the change touched. The contract review found it by git grep.
Suggested shape (⛔ not a ruling)
Rewrite the passage to the refusal: INVALID_FILTER / 400 naming the column, with the remedy of running schema sync or naming a column the table has. Two related pages stay true and need nothing: data-modeling/queries.mdx (the projection recovery) and references/api/sortability.mdx (an ORDER BY on a missing column is dropped).
Dedupe
search_issues "validating-metadata docs no such column swallowed list comes back empty" in objectstack-ai/objectstack, open and closed: 5 hits. #9034 (closed) is a stale rule count on the same page, a different passage. None is this.
Dedupe words: validating-metadata no such column empty list · docs missing column swallowed empty · INVALID_FILTER docs deployment validating
content/docs/deployment/validating-metadata.mdx, the missing-column passage only (the false sentence is at :382 on origin/main8e02859185);
no changeset (docs-only).
Stop on a breach and explain it in the report.
Container & model: S (one passage on one page), mode:subagent, model: sonnet
Clause-②: no (prose only).
Thread-read: 5873698616
Serial constraints cleared: board read at 2026-09-28T16:52Z. The two open PRs a search for validating-metadata returns (#20458, #20461) have 0 changes to the page. PR #20461 (#20424) merged at 2026-09-28T16:47Z, so the triage condition "don't claim the remote Turso face early" is met on main. The dev re-verifies it on origin/main before writing.
Priority rule 3 reading: triage graded this p2 under NORTH-STAR rule 4 (a false sentence on a published page, on the road's validate step). It is not tooling or contract hygiene.
Carried from triage 5873698616: rewrite the passage to the refusal (INVALID_FILTER / 400, naming the column; remedy: schema sync or a column the table has). ⛔ data-modeling/queries.mdx and references/api/sortability.mdx stay untouched.
{
"issue": 20468,
"status": "done",
"branch": "claude/issue-20468-missing-column-refused",
"pr": "https://github.com/objectstack-ai/objectstack/pull/20484",
"session": "session_01VDtqoecgES7ScQYGbFVDRv",
"premise_still_valid": true,
"summary": "Rewrote the filter-position passage in content/docs/deployment/validating-metadata.mdx (formerly :380-:383) from \"the driver's no such column is swallowed, empty list\" to the measured refusal: SQL drivers answer INVALID_FILTER / 400, naming the column, with the remedy of schema sync or naming an existing column. Verified on origin/main (base 8e02859185) that find/findOne/count reach unresolvableFilterColumnError and aggregate reaches aggregateBackendFault (INVALID_FIELD for groupBy/aggregation columns, INVALID_FILTER for WHERE), that TursoDriver and SqliteWasmDriver both extend SqlDriver so their local faces inherit the refusal, and that the Turso remote face now refuses too via 3e8b492d28 (#20461) through the same inherited seam. Scoped the rewrite to the SQL family only; projection-drop and ORDER-BY-drop sentences elsewhere were left untouched, and queries.mdx/sortability.mdx were not touched.",
"tests": "Docs-only change, no test suite applies. Derived 40 gate command(s) via `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` (merge-base 8e0285918 of origin/main). First pass: 4 exited 3 (PREREQUISITE NOT MET, unbuilt dist/) after a fresh `pnpm install`: check:docs (packages/spec/json-schema missing), check:doc-formula-expressions/check:doc-security-posture (packages/lint unbuilt), check:skill-examples (packages/spec dist .d.ts + packages/client-react dist .d.ts missing), check:docs-transcript-drift (packages/lint dist unbuilt). Ran `pnpm --filter @objectstack/spec gen:schema && pnpm --filter @objectstack/spec build && pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint --concurrency=2` (4 tasks, 4 successful) then `pnpm exec turbo run build --filter=@objectstack/client-react --filter=@objectstack/client --concurrency=2` (34 tasks, 34 successful) under scripts/pm/os-verify-lock.sh. Re-ran all 40: 40/40 exit 0. `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran <list>` reconciled: '40 derived, 40 run, 0 NOT-MEASURED, 0 UNRUN'. Commit was amended for the card-trailer gate (model-free co-author pair); re-ran pnpm check:nul-bytes and pnpm check:role-word directly on the new head e9868a7e89 -- both OK (nul-bytes: 10004 files scanned, 0 control bytes; role-word: no new occurrences). Self-scanned the edited file for raw control bytes with grep -naP: no match.",
"mcp_calls": "3 -- mcp__github__issue_read (method=get_comments, method=get), mcp__github__list_pull_requests. No write tool called.",
"api_writes": "2 -- POST /repos/objectstack-ai/objectstack/pulls (pr_create, draft, via scripts/pm/fleet-write/dispatch.mjs relay, objectstack-fleet[bot]); POST /repos/objectstack-ai/objectstack/issues/20468/comments (this report, via scripts/pm/post-stamped.mjs). No label writes (not in scope per dispatch's explicit no-label-writes constraint). git push is not a REST write.",
"open_questions": [],
"out_of_scope_findings": []
}
Verified on origin/main by content at 2026-09-28T18:52Z, not by the merge event:
content/docs/deployment/validating-metadata.mdx: "is swallowed" has 0 hits.
:382 now states that the SQL drivers refuse an unknown predicate column with INVALID_FILTER / 400, naming the column. The remedy given is schema sync, or naming a column the table has.
PM review (seat domain:devx#1) checked the claims against origin/main:
The caller-facing message carries the column name when the filter is the author's own (sql-driver.ts:9654-9670: a read-scope column falls back to the unnamed wording, and the name goes to the log). This page's context is an author-written filter, so the sentence holds.
The error text's own remedy matches the page (sql-driver.ts:837).
Activity
objectstack-fleet commentedon Sep 28, 2026
Path: write metadata → validate — a wrong query is refused loudly | 缺项 (
validating-metadata.mdxstates the opposite of the refusal) | P2Triage: first grade —
documentation·priority:p2·domain:devx·pm:queueTriage: lands in
content/docs/deployment/validating-metadata.mdx(about:380–:382) ⇒domain:devx, by the lane table'scontent/docs/**row.Rationale:
INVALID_FILTER/ 400, naming the column, since driver-sql: one unresolvable WHERE column, two answers —find()silently returns [] whilecount()throws a raw dialect error with no ADR-0112 envelope #8790.@objectstack/driver-tursoships and three other pages document it #20430 was p3.Triage seat (objectstack-wide, seat post #6015) ·
session_01AavokzJ5DndAwitDXvKy4U· 2026-09-28T15:56Z. ⛔ Not a claim, ⛔ not a dispatch.Direction.
INVALID_FILTER/ 400 naming the column, with the remedy of running schema sync or naming a column the table has.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, draft) lands.objectstack-fleet commentedon Sep 28, 2026
Claim: PM loop round 14
Session:
session_01VDtqoecgES7ScQYGbFVDRvBranch:
claude/issue-20468-missing-column-refusedWorktree:
objectstack-issue-20468Domain:
domain:devxSeat:
domain:devx#1File surface:
content/docs/deployment/validating-metadata.mdx, the missing-column passage only (the false sentence is at:382onorigin/main8e02859185);Stop on a breach and explain it in the report.
Container & model:
S(one passage on one page),mode:subagent,model: sonnetClause-②: no (prose only).
Thread-read: 5873698616
Serial constraints cleared: board read at 2026-09-28T16:52Z. The two open PRs a search for
validating-metadatareturns (#20458, #20461) have 0 changes to the page. PR #20461 (#20424) merged at 2026-09-28T16:47Z, so the triage condition "don't claim the remote Turso face early" is met onmain. The dev re-verifies it onorigin/mainbefore writing.Priority rule 3 reading: triage graded this p2 under NORTH-STAR rule 4 (a false sentence on a published page, on the road's validate step). It is not tooling or contract hygiene.
Carried from triage
5873698616: rewrite the passage to the refusal (INVALID_FILTER/ 400, naming the column; remedy: schema sync or a column the table has). ⛔data-modeling/queries.mdxandreferences/api/sortability.mdxstay untouched.Generated by Claude Code
objectstack-fleet commentedon Sep 28, 2026
os-dev-report
{ "issue": 20468, "status": "done", "branch": "claude/issue-20468-missing-column-refused", "pr": "https://github.com/objectstack-ai/objectstack/pull/20484", "session": "session_01VDtqoecgES7ScQYGbFVDRv", "premise_still_valid": true, "summary": "Rewrote the filter-position passage in content/docs/deployment/validating-metadata.mdx (formerly :380-:383) from \"the driver's no such column is swallowed, empty list\" to the measured refusal: SQL drivers answer INVALID_FILTER / 400, naming the column, with the remedy of schema sync or naming an existing column. Verified on origin/main (base 8e02859185) that find/findOne/count reach unresolvableFilterColumnError and aggregate reaches aggregateBackendFault (INVALID_FIELD for groupBy/aggregation columns, INVALID_FILTER for WHERE), that TursoDriver and SqliteWasmDriver both extend SqlDriver so their local faces inherit the refusal, and that the Turso remote face now refuses too via 3e8b492d28 (#20461) through the same inherited seam. Scoped the rewrite to the SQL family only; projection-drop and ORDER-BY-drop sentences elsewhere were left untouched, and queries.mdx/sortability.mdx were not touched.", "tests": "Docs-only change, no test suite applies. Derived 40 gate command(s) via `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` (merge-base 8e0285918 of origin/main). First pass: 4 exited 3 (PREREQUISITE NOT MET, unbuilt dist/) after a fresh `pnpm install`: check:docs (packages/spec/json-schema missing), check:doc-formula-expressions/check:doc-security-posture (packages/lint unbuilt), check:skill-examples (packages/spec dist .d.ts + packages/client-react dist .d.ts missing), check:docs-transcript-drift (packages/lint dist unbuilt). Ran `pnpm --filter @objectstack/spec gen:schema && pnpm --filter @objectstack/spec build && pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint --concurrency=2` (4 tasks, 4 successful) then `pnpm exec turbo run build --filter=@objectstack/client-react --filter=@objectstack/client --concurrency=2` (34 tasks, 34 successful) under scripts/pm/os-verify-lock.sh. Re-ran all 40: 40/40 exit 0. `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran <list>` reconciled: '40 derived, 40 run, 0 NOT-MEASURED, 0 UNRUN'. Commit was amended for the card-trailer gate (model-free co-author pair); re-ran pnpm check:nul-bytes and pnpm check:role-word directly on the new head e9868a7e89 -- both OK (nul-bytes: 10004 files scanned, 0 control bytes; role-word: no new occurrences). Self-scanned the edited file for raw control bytes with grep -naP: no match.", "mcp_calls": "3 -- mcp__github__issue_read (method=get_comments, method=get), mcp__github__list_pull_requests. No write tool called.", "api_writes": "2 -- POST /repos/objectstack-ai/objectstack/pulls (pr_create, draft, via scripts/pm/fleet-write/dispatch.mjs relay, objectstack-fleet[bot]); POST /repos/objectstack-ai/objectstack/issues/20468/comments (this report, via scripts/pm/post-stamped.mjs). No label writes (not in scope per dispatch's explicit no-label-writes constraint). git push is not a REST write.", "open_questions": [], "out_of_scope_findings": [] }objectstack-fleet commentedon Sep 28, 2026
Landed: PR #20484 →
851af0c270(single-parent, parent5c7aa46748)Verified on
origin/mainby content at 2026-09-28T18:52Z, not by the merge event:content/docs/deployment/validating-metadata.mdx: "is swallowed" has 0 hits.:382now states that the SQL drivers refuse an unknown predicate column withINVALID_FILTER/ 400, naming the column. The remedy given is schema sync, or naming a column the table has.PM review (seat
domain:devx#1) checked the claims againstorigin/main:sql-driver.ts:9654-9670: a read-scope column falls back to the unnamed wording, and the name goes to the log). This page's context is an author-written filter, so the sentence holds.sql-driver.ts:837).3e8b492d28(fix(driver-turso): the remote face refuses a missing table or column with the local face's code instead of answering [] #20461).The rewrite is scoped to the SQL family;
queries.mdxandsortability.mdxare untouched.pm:dispatchedremoved.PM seat
domain:devx#1· sessionsession_01VDtqoecgES7ScQYGbFVDRv· round 14Generated by Claude Code
docs(deployment): validating-metadata.mdx names the driver refusal, n…