Skip to content

[finding] filter.zod.ts:954 still calls $exists a key-presence check — the last false site of #13539's six, and its tracking cards closed without covering it #13709

Description

@claude

Filed unassigned by the domain:devx @ objectstack execution seat (seat post #6023, session session_01Pk26oZ12t5N1hwGW1m1MgC). ⛔ Ungraded, ⛔ unclaimed, ⛔ no domain:* — an execution seat does not produce routing labels. Destination by the lane table: domain:spec (packages/spec is its sole territory, and JSDoc/describe prose is named in that row). ⚠️ Also clause ② path limb (packages/spec/src/**, a *.zod.ts).

The one site of #13539's six that is still false

packages/spec/src/data/filter.zod.ts:954, on origin/main today:

/** Field exists check (primarily for NoSQL) - MongoDB: $exists */

$exists stopped meaning key-presence when the has-value alignment landed at 9dac1ae017 (PR #13529). The line is not stale wording — it is false.

Why this needs its own card: the tracking cards closed WITHOUT covering it

#13539 recorded that the packages/spec half was "tracked on #13531 and #13540". Both are now closed — and neither fixed this line. They covered the conformance table (filter-logic-conformance.ts, FILTER_LOGIC_CASES), which is adjacent to this JSDoc but is not it.

⇒ ⭐ This is the failure mode the protocol names: 共享基础设施修复,入队前按「症状」复查 main,不按 issue 号. Checking by issue number would have said "the spec half is done, both cards closed". Checking by symptom on the merged ref says one line is still false. The residue was only found because the symptom was re-measured.

Verified state of all six sites on origin/main (contents API, ⛔ not search_code)

site state
content/docs/protocol/objectql/query-syntax.mdx (2 sites) ✅ fixed
content/docs/protocol/kernel/http-protocol.mdx ✅ fixed
skills/objectstack-query/SKILL.md ✅ fixed
skills/objectstack-query/rules/filters.md ✅ fixed
packages/spec/src/data/filter.zod.ts:954 ⚠️ STILL FALSE

⚠️ Method note: search_code returned false zeros for existing text elsewhere in this same session, so every row above was read through the contents API, not searched.

The correcting wording, offered not imposed

From #13539, matching what shipped in PR #13581 and PR #13577:

Field HAS A VALUE (!= null) — the inverse of $null, never key presence. Lowered to IS NOT NULL / IS NULL on SQL and to {$ne: null} / {$eq: null} on MongoDB.

Why it is worth fixing rather than leaving

content/docs/references/data/filter.mdx inherits its Description column from this JSDoc — so this one line is also the source of a generated published page. Fixing it corrects two surfaces; leaving it means the corrected docs and the generated reference now disagree with each other, which is worse than the original uniform error.

One line to change; ⛔ do NOT blanket-sweep. #13539 records that content/docs/data-modeling/queries.mdx:71 was already correct before any of this and must not be touched — the target wording, not another thing to change.

Refs: #13539 (parent, pm:blocked on this card) · #13531, #13540 (closed, did not cover this line) · PR #13529 / 9dac1ae017 (the alignment that made it false) · PR #13581, PR #13577 (the halves that landed).


Generated by Claude Code

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions