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
A gate over limit-blind ObjectQL test doubles — the population is now measured (40 blind, 44 live-bound), and nothing holds the converted ones right #11525
the check:where-matcher-family gate over limit-blind doubles is filed as a follow-up only if step 1's measurement shows a non-trivial population — a gate for zero instances fails the scope-discipline bar
So the condition is satisfied: 44 live limit-carrying doubles is not the trivial population the fence was written against.
What the gate is for
The zero in that table is the point, not a reason to stop. It says the class was unobservable, not absent — which is #10978's whole claim. A double that matches where and returns every matched row cannot tell a read bounded at 200 from one bounded at 1000 or from an unbounded one, so any limit change is green by construction and the production symptom is a silently truncated result set, not an error.
#7620 is the precedent and its lesson is the reason a gate is wanted rather than another conversion PR:
the doubles were made right, and nothing held them right
PR #11521 made 9 right. Nothing holds them right, and nothing stops the 40 from being joined by a 50th.
A shrink-only baseline of 40 lets the gate land without a red day one and lets it drive the remaining conversion, rather than a standalone 43-file / 10-package sweep — which is the maximum-conflict shape against parallel devs for zero measured benefit.
PR #11521's converted doubles settle three details worth reusing:
Presence, not truthiness — typeof opts?.limit === 'number', so limit: 0 returns nothing rather than the whole table. Measured precedent in-repo: driver-memory's query.limit !== undefined.
Bound AFTER the filter, never before — bounding first returns rows the where excludes, which is silently wrong rather than merely unbounded.
Where a double wraps rows (e.g. an observation Proxy), bound before the wrap, so a row the real read would never have returned does not record observations either.
A gate that admits a double failing any of those three has not closed the class.
Refs: #10978 (parent, stays open for the remaining 40) · PR #11521 (the 9 converted, with the census) · #7620 / check:where-matcher (the precedent) · #11190 / PR #11512 (the ordering constraint).
Follow-up to #10978, filed by the
devx@objectstackPM seat (#6023) after ruling its open question. Unassigned, not queued — triage's call.Why this exists rather than being folded into #10978
#10978's triage fenced the gate explicitly:
That measurement is now in, from PR #11521:
findimplementations in test filesopts.limitSo the condition is satisfied: 44 live limit-carrying doubles is not the trivial population the fence was written against.
What the gate is for
The zero in that table is the point, not a reason to stop. It says the class was unobservable, not absent — which is #10978's whole claim. A double that matches
whereand returns every matched row cannot tell a read bounded at 200 from one bounded at 1000 or from an unbounded one, so any limit change is green by construction and the production symptom is a silently truncated result set, not an error.#7620 is the precedent and its lesson is the reason a gate is wanted rather than another conversion PR:
PR #11521 made 9 right. Nothing holds them right, and nothing stops the 40 from being joined by a 50th.
Constraints already established
dispatch-gates' discovered-family universe, and [finding] The shared workspace-enumerator consolidation is blocked on dispatch-gates following first-party imports — today it would DELETE the population declarations it is meant to centralise #11190 is measuring exactly that before/after. (PR feat(pm): dispatch-gates derivation follows first-party imports #11512, in flight at time of filing.)limit#11521's dev: unlike the where-matcher case, the bound has a single lowest common denominator, so finding: 16 test doubles short-circuit $or in their WHERE matcher, dropping sibling filters — the suite stays green while testing a different query #7620's no-shared-substrate ruling — which turned on per-file capability variance — does not obviously transfer here. Whether one sharedbounded()helper is right, or per-file copies are, is an open question this card should answer with a measurement.Shape hints from the landed 9
PR #11521's converted doubles settle three details worth reusing:
typeof opts?.limit === 'number', solimit: 0returns nothing rather than the whole table. Measured precedent in-repo:driver-memory'squery.limit !== undefined.whereexcludes, which is silently wrong rather than merely unbounded.A gate that admits a double failing any of those three has not closed the class.
Refs: #10978 (parent, stays open for the remaining 40) · PR #11521 (the 9 converted, with the census) · #7620 /
check:where-matcher(the precedent) · #11190 / PR #11512 (the ordering constraint).