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
[finding] Three more expired post-#5702/#5710 status claims in packages/spec/src/data — including "$icontains … implemented by nobody" in the very file #6947's fix points @see at #6993
Observation-class finding, found by a completeness sweep while implementing #6947 (PR #6987). Filed unassigned, no domain:* label — routing is the triage seat's call. Nothing a user hits today: all four sites are prose. Each is the same drift class#6947 names (a status sentence names a future issue as the gap; that issue lands; nothing relates the two), but each needs its own measurement, which is why they were left out of #6987 rather than word-swapped inside it.
Anchors read on origin/main @ 30283263 — re-locate by text, not by line.
1. packages/spec/src/data/filter-text-conformance.ts:39-46 — the twin of the sentence #6947 fixed
* This is the contract half of the #4706 ruling (#5701). `$icontains` is
* declared by `StringOperatorSchema` (`filter.zod.ts`) and implemented by nobody; the
* `$contains` family's case-sensitivity is declared and honoured by two of five
* backends. Every driver therefore carries a measured DEBT row in
* `scripts/check-driver-conformance.mjs`, pointing at **#5702**, which is the
* issue that writes the lowerings and deletes the rows.
Sharpest of the four, because #6987's corrected docblock points straight here: its @see FILTER_TEXT_CASES — the conformance standard for every operator here lands the reader on "implemented by nobody".
Both numbers in it are now wrong, and in opposite directions:
* `FILTER_TEXT_CASES` is a standard no backend answers yet (#5701 is the
* contract half of the #4706 ruling; #5702 writes the lowerings).
Three backends answer it today; driver-sqlite-wasm, driver-sql and driver-turso all import the whole case-set (that import is what scripts/check-driver-conformance.mjs reads as coverage). The paragraph's argument still stands — the file executes the table against a reference evaluator so the table cannot be quietly wrong — only its premise sentence expired.
3. packages/spec/src/data/filter.zod.ts:1305-1313 — the $regex retirement block (a DIFFERENT subject, same class)
* Wiring them to it is **#5702**, deliberately not this PR: `$regex` still has
* one live producer (`plugin-auth`'s ObjectQL adapter, on the authentication
* path), so a refusal landing before #5710 flips that producer would break
* sign-in. Hard order: **#5710 flips the producer, then #5702 turns these
* strings into refusals.**
Both gates fired: #5710 closed (the producer was flipped to $contains; driver-memory/src/filter-refusal.ts records the whole-repo re-scan finding no other live producer) and #5702 closed, with requirement 3 done on all five faces per the conformance ledger. So a paragraph written as a future plan now describes shipped state, and its "hard order" warning is advice about a sequencing risk that no longer exists. #6987 deliberately did not touch this block: its subject is $regex, not $icontains, and stating the post-#5702 state honestly needs a five-face refusal census (does each site print RETIRED_FILTER_OPERATORS[op].why verbatim, in the ADR-0112 envelope) — a real measurement, not a word swap.
4. Same file, :227
// `$options: 'i'` are #5702's work.
Reads as pending; mongo's hard-coded $options: 'i' is in fact still there (measured: translateFilter({ name: { $contains: 'acme' } }) returns {"name":{"$regex":"acme","$options":"i"}}), but its owner is now #6682, not #5702. So this one is stale by attribution rather than by verdict — the least urgent of the four and the easiest to get subtly wrong.
#6987 already discloses two scope extensions beyond its card (the $icontains.describe(), which is the rendered surface, and the FILTER_OPERATORS staging sentence, so the file does not contradict itself). Extending further would have meant shipping three new censuses — the $contains-family scoreboard, the FILTER_TEXT_CASES coverage count, and the five-face $regex refusal audit — inside a card scoped to one paragraph. #6947's dispatch was explicit that the general recurrence gate is #6635's design space and that its own scope was one instance. Filing beats a rushed word-swap: #6947 exists precisely because someone once wrote a status sentence they had not measured.
Suggested disposition
One card covering sites 1, 2 and 4 (all FILTER_TEXT_CASES scoreboard facts, one measurement pass answers all three) and, if triage prefers, site 3 separately since it is the $regex axis. Both are prose-only, domain:spec-surface-shaped, and neither changes behaviour.
Duplicate search before filing (filter-text-conformance stale, implemented by nobody, $regex retirement status 5702, 5710 flips the producer): zero hits.
Refs: #6947 / PR #6987 (the instance just fixed), #6520 ($icontains on the JS faces), #6682 (the $contains family on memory + mongodb), #6518 (case-exactness on the SQL family), #5710 (the flipped producer), #6635 (the general gate, on hold), #6842 / #6696 (earlier specimens of this class).
Observation-class finding, found by a completeness sweep while implementing #6947 (PR #6987). Filed unassigned, no
domain:*label — routing is the triage seat's call. Nothing a user hits today: all four sites are prose. Each is the same drift class #6947 names (a status sentence names a future issue as the gap; that issue lands; nothing relates the two), but each needs its own measurement, which is why they were left out of #6987 rather than word-swapped inside it.Anchors read on
origin/main@30283263— re-locate by text, not by line.1.
packages/spec/src/data/filter-text-conformance.ts:39-46— the twin of the sentence #6947 fixedSharpest of the four, because #6987's corrected docblock points straight here: its
@see FILTER_TEXT_CASES — the conformance standard for every operator herelands the reader on "implemented by nobody".Both numbers in it are now wrong, and in opposite directions:
$icontains… implemented by nobody» — measured for docs(spec):$icontains实施状态按实测重写 —— #5702 已落地,五面里三面应答 (#6947) #6987 by executing all five: three answer (driver-sql;driver-sqlite-wasm, inherited, on the sql.js engine;driver-tursoon both transports), two refuse withINVALID_FILTER/ 400 (driver-memory,driver-mongodb— JS 求值面全体拒收$icontains(driver-memory 两面 / driver-mongodb / objectqlhaving/ formula)—— SQL 族已实现,同一 filter 在内存 double 上抛错 #6520).$containsfamily … honoured by two of five backends» — after drivers(sql family): 文本算子的大小写折叠是「方言的」而非「契约的」——$contains在 SQLite 过折叠、$icontains在 PG/MySQL 过折叠 #6518 the SQL family is case-exact, i.e. three of five drivers, plusformula/ objectqlhaving/ bothservice-analyticscompilers which were already compliant. The two left aredriver-memoryanddriver-mongodb(drivers(memory, mongodb): the$containsfamily still folds case — the last two backends left on the wrong side of #4706 Q2 = A #6682).FILTER_TEXT_CASESDEBT rows, not five; drivers(sql family): 文本算子的大小写折叠是「方言的」而非「契约的」——$contains在 SQLite 过折叠、$icontains在 PG/MySQL 过折叠 #6518 deleted the three SQL-family rows.Whoever fixes it must re-measure rather than copy the numbers above.
2.
packages/spec/src/data/filter-text-conformance.test.ts:4-8Three backends answer it today;
driver-sqlite-wasm,driver-sqlanddriver-tursoall import the whole case-set (that import is whatscripts/check-driver-conformance.mjsreads as coverage). The paragraph's argument still stands — the file executes the table against a reference evaluator so the table cannot be quietly wrong — only its premise sentence expired.3.
packages/spec/src/data/filter.zod.ts:1305-1313— the$regexretirement block (a DIFFERENT subject, same class)Both gates fired: #5710 closed (the producer was flipped to
$contains;driver-memory/src/filter-refusal.tsrecords the whole-repo re-scan finding no other live producer) and #5702 closed, with requirement 3 done on all five faces per the conformance ledger. So a paragraph written as a future plan now describes shipped state, and its "hard order" warning is advice about a sequencing risk that no longer exists. #6987 deliberately did not touch this block: its subject is$regex, not$icontains, and stating the post-#5702 state honestly needs a five-face refusal census (does each site printRETIRED_FILTER_OPERATORS[op].whyverbatim, in the ADR-0112 envelope) — a real measurement, not a word swap.4. Same file,
:227Reads as pending; mongo's hard-coded
$options: 'i'is in fact still there (measured:translateFilter({ name: { $contains: 'acme' } })returns{"name":{"$regex":"acme","$options":"i"}}), but its owner is now #6682, not #5702. So this one is stale by attribution rather than by verdict — the least urgent of the four and the easiest to get subtly wrong.Why these were not folded into PR #6987
#6987 already discloses two scope extensions beyond its card (the
$icontains.describe(), which is the rendered surface, and theFILTER_OPERATORSstaging sentence, so the file does not contradict itself). Extending further would have meant shipping three new censuses — the$contains-family scoreboard, theFILTER_TEXT_CASEScoverage count, and the five-face$regexrefusal audit — inside a card scoped to one paragraph. #6947's dispatch was explicit that the general recurrence gate is #6635's design space and that its own scope was one instance. Filing beats a rushed word-swap: #6947 exists precisely because someone once wrote a status sentence they had not measured.Suggested disposition
One card covering sites 1, 2 and 4 (all
FILTER_TEXT_CASESscoreboard facts, one measurement pass answers all three) and, if triage prefers, site 3 separately since it is the$regexaxis. Both are prose-only,domain:spec-surface-shaped, and neither changes behaviour.Duplicate search before filing (
filter-text-conformance stale,implemented by nobody,$regex retirement status 5702,5710 flips the producer): zero hits.Refs: #6947 / PR #6987 (the instance just fixed), #6520 (
$icontainson the JS faces), #6682 (the$containsfamily on memory + mongodb), #6518 (case-exactness on the SQL family), #5710 (the flipped producer), #6635 (the general gate, on hold), #6842 / #6696 (earlier specimens of this class).