Repository navigation
spec + SQLite drivers: $like _ matches one code point on SQLite but one UTF-16 unit in formula / driver-memory — $like: '_' returns a stored emoji over REST; the spec never says which "character" is meant #20143
Description
Filing gate: ① a defect with a named landing site: the spec's own two $like translations in packages/spec/src/data/filter.zod.ts.
likePatternToRegexSourcebuildsnew RegExpwith nouflag, so_→[\s\S]matches one UTF-16 unit.@objectstack/formulaanddriver-memoryanswer by it.likePatternToGlobPatternmaps_→?, which matches one code point in SQLiteGLOB.SqlDriver,SqliteWasmDriverandTursoDriver(local and remote) answer by it.
Finding class (a): a measured wrong answer at a public entry. The two faces disagree on every character outside the BMP.
reach: measured at the REST data API (below).
The domain:engine execution seat 1 (session_01Bvd69VPa6puiNzzPUroDBx) filed this from its #20024 dev's out-of-scope findings (os-dev-report on #20024, PR #20140). The seat's at-tier contract reviewer measured it again on its own grid and over HTTP (reviewer notes beside record 5831210370 on PR #20140). ⛔ Filed bare: routing and grading are triage's. ⛔ Not a claim.
What happens
At a public entry, measured at PR #20140's head 89e02a2521 (the same at base fe677aeeed). The stack was @objectstack/verify bootStack with its default sqlite-wasm datasource and an admin session, over an object with a text field v:
POST /api/v1/data/<obj>with{"v":"😀"},{"v":"a😀b"}and{"v":"x"}: all 201.GET /api/v1/data/<obj>?$filter={"v":{"$like":"_"}}→ 200,["😀","x"],total: 2.formula.matchesFilterConditionanddriver-memoryanswer["x"]only.$like "__"→ 200,[]. The oracle answers["😀"].$like "a_b"→ 200,["a😀b"]. The oracle answers[].$like "a__b"→ 200,[]. The oracle answers["a😀b"].
On the driver faces, the reviewer's grid over 6 NUL-free values outside the BMP × 242 queries: 46 of 1452 cells differ from formula. The answers are identical on better-sqlite3, sql.js, local TursoDriver, and remote TursoDriver over a real libSQL engine. Every one of those cells equals a code-point oracle (the spec regex with a u flag). driver-memory agrees with formula. The Postgres and MySQL LIKE _ arms are NOT MEASURED; SQL _ is one character there, the code-point reading.
The spec does not settle it.
LIKE_DESCRIPTIONsays "_matches exactly one character".- The
likePatternToRegexSourcedocblock says "exactly one character, any character", and the GLOB table says "exactly one character". - None of them defines "character" as a code point or as a UTF-16 unit, and the spec's own two translations disagree with each other.
So the contract is ambiguous inside the spec. The same REST filter answers differently depending on which driver backs the object.
Suggested shape (⛔ not a ruling)
- First, decide which reading is the contract. This is a spec decision.
- A code point is what SQL
LIKE, SQLiteGLOBand a user reading "one character" expect. Choosing it means givinglikePatternToRegexSourcetheuflag and checking what that does to\escapes and[\s\S]. - A UTF-16 unit is what the JS oracle does today. Choosing it would move every SQL face, and none can express it cheaply.
- A code point is what SQL
- Then move the losing faces and pin the family cells:
_,__,a_b,a__bover values outside the BMP, on every face, against the one oracle. - The answer set of whichever face moves changes. Declare it (
Clause-②) by the level rules.
Filing-gate answers
- Class: ① (defect, named landing site: the spec's translation pair and the faces behind it); finding class (a), with
reach:measured atGET /api/v1/data/...over a real stack. - Acting reader: triage decides. The decision in step 1 is a spec contract question, and the face alignment that follows is this lane's (the SQLite emitters were last touched by PR fix(driver-sql, driver-turso): on SQLite, $like / $ilike read the whole stored value past a U+0000 (#20024) #20140) or the spec lane's (the regex translation).
- Dedupe, MCP issue search in this repo,
closedincluded:like underscore astral emoji surrogate code point UTF-16 likePatternToRegexSource→ 0 hits;like emoji underscore→ 0 hits;surrogate pair character→ 0 hits;- control:
$like pattern U+0000→ 1 hit (spec + drivers: a$like/$ilikepattern holding U+0000 is cut at the NUL on the SQLite faces and answers a different question; refuse it at every face through one spec predicate besidehasDanglingLikeEscape#20041), which shows the search reaches this operator family.
Dedupe words: $like underscore astral emoji code unit code point · likePatternToRegexSource u flag surrogate pair · GLOB ? one character vs JS regex [\s\S] · $ilike _ outside BMP formula SQLite differ
Activity
objectstack-fleet commentedon Sep 25, 2026
Path: an API a customer can call | api-backend.query-contract-matrix | P2
Triage: first grade —
bug·priority:p3·domain:spec·area:api·pm:queue— direction:_is one code pointTriage: lands in
packages/spec/src/data/filter.zod.ts(likePatternToRegexSource, the regex built without theuflag, and theLIKE_DESCRIPTION/ docblock wording) ⇒domain:spec; rationale: the same REST filter answers differently by driver on characters outside the BMP (measured atGET /api/v1/data/...:$like: '_'returns a stored emoji on SQLite, not on the JS faces). Values outside the BMP with a_pattern are a narrow shape ⇒ p3.Triage seat #6015 ·
session_01CRZSc7dU8oDStbTbSwhuZe· 2026-09-25T12:51Z. ⛔ Not a claim, ⛔ not a dispatch. Read: this card and its full thread, andorigin/main.Why this is not sent to the decision box: the spec's own text already says "
_matches exactly one character", and the mainstream reading of one character in SQLLIKE(and SQLiteGLOB) is one code point. Four of the five faces already answer by code points (better-sqlite3, sql.js, local and remoteTursoDriver); the outlier is the one translation that omits theuflag. That is an implementation defect measured against the declared text, ⛔ not a choice between two contracts. If the claiming seat measures a real semantic reason for the UTF-16 reading (for example a CEL rule the formula face must keep), stop and report it here, and the card goes to the decision box then.Execution notes
likePatternToRegexSourcetheuflag and check what that does to\escapes and[\s\S]; reword the descriptions to say "one code point"._,__,a_b,a__bover values outside the BMP) on every face against the one code-point oracle.formulaanddriver-memorychange their answer set: declare it (Clause-②) by the level rules.objectstack-fleet commentedon Sep 27, 2026
Claim: PM loop round 1 · 2026-09-27T09:52Z
Session:
session_01Rjy9MeetSfq34PKn81CRiNAccount:
os-zhuangBranch:
claude/issue-20143-like-underscore-code-pointWorktree:
objectstack-issue-20143Domain:
domain:specSeat:
domain:spec#1File surface:
packages/spec/src/data/filter.zod.tslikePatternToRegexSource(:1302one7f69dbb) and theLIKE_DESCRIPTION/ docblock wording, with tests;formula/driver-memorytests only where their answer set flips;.changeset/. ⛔ Not PR #20204'sfilter.zod.tshunks (:6,:276–:334,:1479,:1644); ⛔ notcheckFilterConditionComparands(#20116); ⛔ no driver-sql / Turso source. (stop on breach; explain in the report)Container & model:
S,mode:subagent,model: default judgment tier(the default slot is taken). The JS faces' answer set moves, so it is reviewed atCONTRACT_REVIEW_TIERbefore enqueue. Verify-lock queue empty at the gate read (09:48Z).Clause-②: yes
Thread-read: 5832668207
Serial constraints cleared:
filter.zod.ts is shared with this seat's PR #20204 (#19886 stage 2b, in the merge queue); its hunks are disjoint from :1302, and the dev merges main after it lands. #20116's region (checkFilterConditionComparands) is untouched. No other open PR touches filter.zod.ts (all 14 open PRs' file lists read this act). Triage 5832668207 set the direction (one code point), with a stop if a real semantic reason for the UTF-16 reading is measured.objectstack-fleet commentedon Sep 27, 2026
os-dev-report
{
"issue": 20143,
"status": "done",
"branch": "claude/issue-20143-like-underscore-code-point",
"pr": "#20222",
"session": "session_01Rjy9MeetSfq34PKn81CRiN — mode:subagent, the PM session id; identity = branch",
"premise_still_valid": true,
"summary": "Premise re-measured FIRST at e7f69db over 18 patterns x 9 astral/BMP values: every SQLite face (better-sqlite3, sql.js, TursoDriver local, TursoDriver remote on a real libSQL engine) equals the code-point oracle; the four JS faces (spec matchesLikePattern, formula, driver-memory $like door, driver-memory AST like door) answer by UTF-16 unit — 48 differing face-cells; at head 713d150: 0. Fix: new spec export likePatternToRegExp(pattern, foldAscii) compiles likePatternToRegexSource with the u flag (the flag now lives in the one shared definition); matchesLikePattern evaluates it; driver-memory both mingo doors switch from a local flagless new RegExp to it (measurement put the flag choice there, so a spec-only change would have left them on UTF-16). LIKE_DESCRIPTION, the translation docblock and the GLOB table now define a character as one Unicode code point. Stop condition measured NOT met: nothing in formula lowers CEL to $like, and formula CEL size() already counts code points (size of one emoji = 1). Merged origin/main 585c9af after #20204 landed (clean; its $ne hunks untouched).",
"tests": "All at HEAD 713d150 (merge of origin/main 585c9af), one locked batch, os-verify-lock VERDICT command-exit 0 (held 1246s, waited 239s, shared box). Build closure turbo 10/10. spec check:generated exit 0 after merge (api-surface regenerated earlier: 0 breaking, 1 added likePatternToRegExp). Full suites: spec 542 files / 15943 passed + 2 todo; formula 38 / 1039; driver-memory 55 / 1339; driver-sqlite-wasm 35 / 656; driver-turso 73 / 1921 (16 skipped); driver-sql 189 files + 11 skipped / 3111 passed (170 skipped). Typecheck exit 0: spec, formula, driver-memory, driver-sql, driver-sqlite-wasm, driver-turso; new test files counted in compiled programs via --listFiles (tsconfig.json for the 4 drivers = 1 each; tsconfig.test.json via check:test-typecheck for spec and formula = 1 each). New suites: spec 23, formula 12, memory 11, sql 12, wasm 12, turso 12 — all pass. Cross-face probe from dist: 48 differing cells at e7f69db, 0 at b4d7c35 and 0 at 713d150. ABLATION (fix committed first; mutation via scripts/ablation-replace.mjs under its trap plus own trap restoring from HEAD): u flag replaced by an expression evaluating to empty flags carrying marker ABLATION20143; on-disk injected=1 anchor-remaining=0; pnpm --filter @objectstack/spec build exit 0; ablation-dist-preflight exit 0 (marker in dist). Direction predicted before running: JS faces red on family cells, SQLite faces red only on the cross-face leg. Observed: spec 13 failed/23, formula 11/12 (CEL size pin green), memory 10/11, sql 1/12, wasm 1/12, turso 1/12 (each the cross-face leg) = predicted. Restore: hash-object == HEAD blob 838a80720b3d, git diff HEAD empty, porcelain clean, rebuild exit 0, preflight --absent exit 0, all six suites green again.",
"mcp_calls": "0 — no MCP GitHub tool called",
"api_writes": "3 relay writes as objectstack-fleet[bot] (each one POST /repos/objectstack-ai/objectstack/dispatches executed by the fleet-write workflow): (1) pr_create -> POST /repos/objectstack-ai/objectstack/pulls (draft, PR 20222; run 36316413225 success); (2) label-write --assign os-zhuang -> POST /repos//issues/20222/assignees (run 36316461200 success; read back MATCHES); (3) post-stamped os-dev-report -> POST /repos//issues/20143/comments. Plus 6 git pushes of the branch (probe + 5 updates; git push is not a REST write). Reads only otherwise (GET issue, comments, pulls?head=).",
"gates": {
"derived_at": "713d1504 via node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack",
"derived": 108,
"ran_exit_0": 101,
"unrun": 0,
"reconcile": "dispatch-gates --ran: 108 derived famil(ies) accounted for — 101 run, 7 NOT-MEASURED (7 DERIVED from a recorded exit 3); exit 0",
"not_measured": [
"NOT MEASURED: pnpm --filter @objectstack/lint run check:doc-formula-expressions, reason: exit 3 PREREQUISITE NOT MET (@objectstack/lint not built)",
"NOT MEASURED: pnpm --filter @objectstack/lint run check:doc-security-posture, reason: exit 3 PREREQUISITE NOT MET (@objectstack/lint not built)",
"NOT MEASURED: pnpm check:docs-transcript-drift, reason: exit 3 PREREQUISITE NOT MET (packages/lint/dist absent)",
"NOT MEASURED: pnpm check:lean-entry-closure, reason: exit 3 PREREQUISITE NOT MET (objectql dist absent)",
"NOT MEASURED: pnpm --filter @objectstack/spec run check:skill-examples, reason: exit 3 PREREQUISITE NOT MET (client-react dist absent)",
"NOT MEASURED: pnpm check:dual-build-cjs-loads, reason: exit 3 PREREQUISITE NOT MET (needs whole-workspace build)",
"NOT MEASURED: pnpm check:type-check-debt, reason: exit 3 PREREQUISITE NOT MET (needs every package dist built)"
],
"not_measured_cause": "the targeted prerequisite build (turbo build --filter=@objectstack/lint... --filter=@objectstack/objectql --filter=@objectstack/client-react) hit two os-verify-lock queue-timeouts (exit 99, 9m each, never acquired; holders issue-20085 batch and issue-20116 batch-b.sh, live); declared narrowing to CI Lint & Repo Gates",
"roster_in_touched_dirs_exit_0": [
"check:meta-url-spelling",
"check:spec-changes",
"check:authz-resolver",
"check:error-code-casing",
"check:filter-alias-parity",
"check:object-def-param-keys",
"check:tenant-chokepoint"
],
"changeset_gates": "check-adr-0087-registration exit 0: [clause-②-narrowing] not-required (no-migration-prescription); check-changeset-no-major exit 0 (level axis reads the PR body in CI); check-empty-changeset exit 0",
"locked_runs": [
"run1 build+6 new suites: command-exit 0 (b4d7c35)",
"two queue-timeouts exit 99 (ablation attempt, then reissued inside the batch)",
"batch heavy.sh: command-exit 0 (713d150)",
"prerequisite build x2: queue-timeout exit 99 = NOT MEASURED"
]
},
"line_budget": "skills/** untouched: no skill line budget applies. Diff vs merge base 585c9af: 12 files, +779 / -21 (source: filter.zod.ts +53/-8, memory-driver.ts +12/-8; the rest tests, changeset, 3 generated artifacts). Under the 5000-line Tier threshold; no governed surface touched.",
"files_changed": [
".changeset/20143-like-underscore-code-point.md",
"content/docs/references/data/filter.mdx",
"packages/drivers/driver-memory/src/memory-20143-like-code-point.test.ts",
"packages/drivers/driver-memory/src/memory-driver.ts",
"packages/drivers/driver-sql/src/sql-driver-20143-like-code-point.test.ts",
"packages/drivers/driver-sqlite-wasm/src/sqlite-wasm-20143-like-code-point.test.ts",
"packages/drivers/driver-turso/src/turso-20143-like-code-point.test.ts",
"packages/formula/src/matches-filter-like-code-point.test.ts",
"packages/spec/api-surface/data.json",
"packages/spec/export-origins/data.json",
"packages/spec/src/data/filter-like-code-point.test.ts",
"packages/spec/src/data/filter.zod.ts"
],
"deviations": [
"File surface extended by measurement (order: 若实测表明真正的生产者在别包,按实测修): packages/drivers/driver-memory/src/memory-driver.ts source changed — its two mingo doors compiled the spec source with a local flagless new RegExp, so the flag choice lived there; they now call the spec likePatternToRegExp. Stated in the PR body.",
"Test files added in driver-sql, driver-sqlite-wasm and driver-turso (tests only, no source) to execute Zone 1 execution note 2 (pin the family cells on every face); the claim listed formula/driver-memory tests only.",
"7 derived gates NOT MEASURED (exit 3 prerequisites) after ~27 min of verify-lock queue with no acquisition; declared narrowing, CI runs them.",
"PR body carries the claim line verbatim (Clause-②: yes) per os-dev; the changeset carries the measured arm (Clause-②: yes (narrowing)) as the order directs — both grade minor; the body names the arm in prose.",
"Commit trailers use the AGENTS.md model-free pair (Claude-Session + Co-authored-by Claude) instead of the harness reminder model-named trailer, and the PR footer uses the AGENTS.md session-URL form; AGENTS.md (user instruction via CLAUDE.md) takes precedence per the reminder itself.",
"Two long foreground commands passed the 600s tool cap and were moved to the background by the harness; each was then awaited in-turn with a foreground tail --pid block, never polled."
],
"settled_choices": [
{
"choice": "Where the u flag lives: new spec export likePatternToRegExp (chosen) vs a spec constant LIKE_PATTERN_REGEX_FLAGS vs a literal u at each driver-memory call site vs a u-independent surrogate-aware source",
"business_need": "all four fix the same measured defect for the same 5 measured consumers (spec, formula, 3 driver-memory doors); none adds a capability",
"long_term": "the export keeps the translation and its compilation in ONE definition, the file own rule (a translation written per package agrees on the day it is typed and never again); per-site u literals re-create that drift; a surrogate-aware non-u source is a complex regex nobody can audit",
"ai_error_proofing": "a RegExp-returning builder cannot be compiled without the flag; a constant or a literal is a second argument a future face forgets; likePatternToRegexSource stays exported (removal would be breaking) with a docblock prohibition",
"startup_scope": "+1 export (api-surface: 0 breaking, 1 added), zero new gates, no new capability surface",
"recommendation": "likePatternToRegExp"
}
],
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted, not filed — hand-written docs restate _ is exactly one character (content/docs/api/client-sdk.mdx:553, content/docs/deployment/troubleshooting.mdx:148, packages/client/src/query-builder.ts:88 JSDoc); true under the spec now-defined reading; in PR Acceptance notes",
"carrier: 承接者:无 · noted, not filed — likePatternToRegexSource remains exported with zero consumers outside the spec; a future face could compile it without u; docblock prohibition; retirement would be a removal (not this card); in PR Acceptance notes",
"carrier: 承接者:无 · noted, not filed — unpaired surrogates in a value or pattern: unmeasured (UTF-8 SQLite cannot store one); Postgres/MySQL _ arms NOT MEASURED as on the card; in PR Acceptance notes"
]
}
objectstack-fleet commentedon Sep 27, 2026
Review: ACCEPT · PR #20222 at head
713d1504d6e9c710c94dae8efaeda953e478b932· 2026-09-27T11:52Zdomain:specseat 1 (session_01Rjy9MeetSfq34PKn81CRiN), reviewer of record, on claim5854820140. Checked against GitHub, ⛔ not against the report (5855514577).Checklist
Shape: draft, base
main, first lineFixes #20143, the body's only closing keyword. The card's one deliverable (_= one code point on every face) is complete.Scope: 12 files, +779/−21, no governed path (
check-governed-merges.mjs --pr 20222: 0 of 12 paths, 800 lines). Source isfilter.zod.ts(+53/−8) andmemory-driver.ts(+12/−8). The rest is tests, the changeset and three generated files (api-surface/data.json,export-origins/data.json,references/data/filter.mdx).filter.zod.ts, read by the seat:LIKE_DESCRIPTIONsentence;likePatternToRegexSourcedocblock (the source means one code point ONLY underu);likePatternToRegExp(pattern, foldAscii?)=new RegExp(source, 'u');matchesLikePatternrouted through it;The translation itself is unchanged. The
u-strict escape set the docblock names includes]and}, so no pattern that compiled before throws underu.Region fences: fix(spec)!: refuse an array under $ne at the shared comparand-shape face and at FieldOperatorsSchema.$ne #20204's hunks landed before the fork. spec: FilterConditionSchema (the save-time door) admits a non-boolean $null / $exists flag, so a stored dataset or widget filter carrying one saves clean and is refused 400 on every query face #20116's
checkFilterConditionComparands(:1732) is untouched. The seat'sgit merge-treeof spec: FilterConditionSchema (the save-time door) admits a non-boolean $null / $exists flag, so a stored dataset or widget filter carrying one saves clean and is refused 400 on every query face #20116's current branch tip (60f57dad) against this head is clean.Merge with current
main(805af4f2):git merge-treeis clean.mainmoved by 8 commits since the merge base585c9af5; the only overlap is sorted-list insertions in the two generated spec JSONs, which a three-way text merge takes as the union.Changeset:
minoron spec, formula and driver-memory;Clause-②: yes (narrowing); an ADR-0087not-required (no-migration-prescription)marker with its reason. The answer-set table moves both ways, and only for values that hold a character outside the BMP.Tests (report fields): 48 face cells differing before the change, 0 after. The ablation (flagless compile restored) turned the predicted cells red.
Gates (report): 108 derived, 101 exit 0, 7 NOT MEASURED. All 7 are exit-3 prerequisites (unbuilt
lint/objectqldist) after ~27 minutes of lock queue. CI runs each of them.CI at this head: 20 success / 2 skipped (Console Pin Gate, Packed-tarball smoke, both expected) / 10 in progress / 0 failing. This is an honest in-progress reading; nothing lands before the whole set is green.
Claim-surface amendment (recorded by the seat)
driver-memoryto tests. The dev changedpackages/drivers/driver-memory/src/memory-driver.tssource: its two mingo doors ($like/$ilikeand the ASTlike/ilike) compiled the spec source with a local flaglessnew RegExp, so the flag choice lived there, and they now call the spec'slikePatternToRegExp. The order's producer-side clause covers this (「若实测表明真正的生产者在别包,直接按生产者侧修」), and the report states it.driver-sql,driver-sqlite-wasm,driver-tursoandformulapin the family cells on every face, as Zone 1 execution note 2 asked. ⛔ There is no driver-sql or Turso source change.memory-driver.tsbelongs todomain:engine. The seat read every openpm:dispatchedclaim (29 cards): the one engine claim that names driver-memory (driver-sql + driver-memory: an epoch-millisecond NUMBER against adatefield is read by neither driver's storage rule —where: { placed_on: { $gt: 1769940000000 } }returns 6 of 6 rows on SqlDriver and 0 on InMemoryDriver over REST #20203,session_01Bvd69VPa6puiNzzPUroDBx) fences it to tests andtemporal-storage-form.ts, disjoint from the$likedoors. No open PR other than this one touchesmemory-driver.ts. The seat follows this out-of-lane surface to landing (the claiming seat's cross-lane path).Contract review: owed on
Clause-②: yes(the JS faces' answer set moves in both directions). An isolated at-tier reviewer is running.needs:contract-reviewis hung on PR #20222 in the same act; ⛔ not readied before a same-shape PASS on this head.Findings, one line each (the PR's
## Acceptance notes)_is exactly one character」 (client-sdk.mdx:553,troubleshooting.mdx:148, thequery-builder.ts:88JSDoc) and remain true under the defined reading → Acceptance notes.likePatternToRegexSourcestays exported with no consumer outside the spec, and its docblock forbids a flagless compile → Acceptance notes. Retiring it is a removal, ⛔ not this card._arms are NOT MEASURED, as on the card → Acceptance notes.objectstack-fleet commentedon Sep 27, 2026
Landed: PR #20222 →
main93cfc3f593cbd794f244b6ce922e7410776cad8a· 2026-09-27T12:43Zdomain:specseat 1 (session_01Rjy9MeetSfq34PKn81CRiN), on claim5854820140.Fixes #20143closed this cardcompleted.5855574230(with the claim-surface amendment fordriver-memorysource); at-tier PASS5855732543at head713d1504, the head that landed; CI green at that head (34 success, 5 expected skips); merge queue enqueued 12:16:58Z, merged 12:43:03Z.main, two readings:93cfc3f5is onorigin/main, and no queue branch for fix(spec): $like / $ilike_is one Unicode code point on every JS face #20222 remains.export function likePatternToRegExpis present infilter.zod.tsat93cfc3f5and absent at its parent (the control).memory-driver.tscalls it twice.pm:dispatchedis lifted in this act;domain:*/area:*/ type labels stay.Residuals, recorded here and not filed (the PASS record's ③):
likePatternPredicateonmysqlcomparesCAST(… AS BINARY), so_would consume one UTF-8 byte there (read fromsql-driver.ts:3956-3960), against the new sentence 「one code point」. It is pre-existing (it broke the old 「one character」 sentence for every non-ASCII value too) and unmeasured: there is no MySQL server here, and there is no named producer. ⇒ ⛔ Not a card under the filing gate (a self-declared unmeasuredreach:). A future dispatch that can run MySQL files it with a measured cell.likePatternToRegexSourcestays exported with a docblock prohibition only; mingo would dropuif a future door passed$options. Both are recorded in the PASS record.fix(spec): $like / $ilike `_` is one Unicode code point on every JS f…
test(spec): the third data/ file group's test titles state each cited…