Skip to content

Commit a090421

Browse files
committed
docs(skills): the filter-token guard now has a build-time half
The query skill's filters rule described the #3810 runtime refusal as the only signal. Two of its three causes — a mistyped field and an un-expanded lookup hop — are statically decidable, and `objectstack validate` now fails on them in a filter position rather than warning. Records which half catches what, so an author reading the rule knows a filter typo is a build failure, the same reference outside a filter is still only a warning, and an unresolved flow variable remains run-time-only (it is not statically checkable). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EdCvGtER9SzJopS4Yh3Pa1
1 parent ab33804 commit a090421

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

‎skills/objectstack-query/rules/filters.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,14 @@ query. That covers a mistyped field (`{record.ownr}`), an input the run never
273273
received, and a lookup hop (`{record.account.name}` — the trigger record
274274
carries a scalar id; add the relation to the start node's `config.expand`).
275275

276+
Two of those three are caught earlier: `objectstack validate` **fails** on a
277+
`{record.<path>}` filter token naming an unknown field, or hopping through a
278+
relation the start node does not `expand`, because the runtime has already
279+
committed to refusing that node. The same reference outside a filter — in a
280+
message body, an `http` url, a write payload — stays a warning, since there it
281+
renders a blank rather than widening a query. An unresolved *flow variable*
282+
(`{someInput}`) is not statically checkable and still surfaces at run time.
283+
276284
**Unknown tokens are rejected, not ignored.** `{current_user}` (the RLS
277285
expression root) and `{this_quarter_start}` are near-misses, not tokens:
278286
`objectstack build` fails on them and the runtime resolver throws. A filter

0 commit comments

Comments
 (0)