Repository navigation
test(spec): the third data/ file group's test titles state each cited decision in words instead of a tracker number (stage 17) - #21856
Merged
Conversation
… decision in words instead of a tracker number (stage 17) The 20 test files directly under packages/spec/src/data/, from filter-comparand-type.test.ts through filter-view-operator-parity.test.ts, carry no tracker id in a test title or declared test string. Each id became a statement, in words, of what its record decided, or was dropped where the title already said it. Text only: no assertion, identifier, code comment or non-test file moves. Claude-Session: https://claude.ai/code/session_01T9u38rswFp5Rw8DswRUReJ Co-authored-by: Claude <noreply@anthropic.com>
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #20749
Clause-②: no
Stage 17 of this card: the next area of class (e), the test strings shipped under
packages/spec/src, as ruled in5902360492on #20513. This stage takes the third name-ordered file group directly underpackages/spec/src/data/: the 20 test files fromfilter-comparand-type.test.tstofilter-view-operator-parity.test.ts. They carried 95 messages and 99 tracker ids, citing 36 records. Every one of those ids now either states what its record decided, in words (form D), or is dropped where the title already says it. Text only: no assertion, identifier, test count or code comment changes.Census at the base (
2799155678)Instruments:
census10.cjs(md59d08602ab972b4b8643c90d64d40fa41),census.cjs(md56e42a45a926d375013c32d62f16a296e),census-wide.cjs(md5c98410a19529c439adb0afbfb00026a2) anddirtable.cjs(md5dda605c54745b4a60cc14c9a686e4eff). They are byte-identical to the copies stages 10 to 16 used. A literal counts as a test title when its folded message is argument 0 of adescribe/it/testcall,.each/.skip/.onlychains included. Everything else is an "other" string.Both instruments read 1140 messages / 1207 ids in 245 files, the seat's reading at
2799155678. That is stage 16's head reading (1137 / 1204) plus the three ids that PRs #21819 and #21825 added in newui/test titles, which ride theui/stages.ui/data/(this PR: the third 20 files)api/system/src/)ai/contracts/The group reads 95 messages / 99 ids in 20 files, the seat's figures, file for file:
data/)filter-comparand-type.test.tsfilter-cross-field-comparison-class.test.tsfilter-dotted-head.test.tsfilter-empty-operator.test.tsfilter-equality-array-schema-door.test.tsfilter-field-reference-lowering.test.tsfilter-icontains-parse-door.test.tsfilter-like-code-point.test.tsfilter-like-nul-pattern.test.tsfilter-like-wire-lowering.test.tsfilter-lowering.test.tsfilter-ne-array-schema-door.test.tsfilter-number-comparand-declared-type.test.tsfilter-operator-vocabulary.test.tsfilter-preset-comparand.test.tsfilter-save-door-face-parity.test.tsfilter-text-comparand.test.tsfilter-text-conformance.test.tsfilter-text-operator-declared-type.test.tsfilter-view-operator-parity.test.tsTwo more test files sit in the same name range and carry no id:
filter-subtree-provenance.test.tsandfilter-verdict.test.ts. They are not touched.data/filter.test.ts, outside the group, reads 18 / 19 at the head as at the base. Lit, "other" strings: the twin expect messages insystem/message-queue-retirement.test.ts(:87,:127) still read at the head. Dark:data/filter-operator-vocabulary.test.tsreads 0 / 0 at the head while 11 of its comment lines still carry a number. Planted in a scratch copy of the headdata/filter-like-nul-pattern.test.ts: an id put into a title reads 1 / 1, and an id put into a comment reads 0.#plus digits) reads the same totals as the gate pattern in all 20 files at the base, and 0 in all 20 at the head.How the area was chosen
data/has no subdirectory to split by, so its stages take name-ordered file groups near the ~100-id bound. Stage 16's re-cut named this group at 99, and this census reads 99, so the rule needed no re-cut.Named for the next stages (re-cut from the head census, 1045 / 1108;
data/185 / 200 left, the same cut stages 15 and 16 named):data/in two more stages, name-ordered:filter.test.tstoobject.test.ts: 17 files, 103 messages / 114 ids.object.test.tsalone carries 42, so no cut lands nearer the bound;query-transport.test.tstovalidation.test.ts(11 files, 34 / 34) withdata/driver/(7 files, 48 / 52): 86 ids.ui/419, about four stages.api/201, two.system/165, two. The files directly insrc/, 120, one.ai/build-progress.test.ts:236,:237,contracts/approval-service.test.ts:274), one stage with their docblocks.What each id became
20 literals (23 ids) now state a decision in words. 3 literals (4 ids) get their subject back in words where the number stood in for it. 72 literals (72 ids) drop a number the title already explains.
Every cited record was read with its comments through REST: 35 answer 200. #14426 answers 404, and its decision was read from what landed: commit
40a44b91band its CHANGELOG entry (theundefinedcomparand refusal names the null predicate by its full spellings, so following it never lands in another refusal). The title already says that, so the number is dropped.data/)filter-comparand-type.test.ts:41filter-comparand-type.test.ts:255filter-cross-field-comparison-class.test.ts:44filter-dotted-head.test.ts:24filter-empty-operator.test.ts:148filter-field-reference-lowering.test.ts:56{ $field }comparand — lowered to$eq, never a bare field spec".filter-like-nul-pattern.test.ts:25filter-like-wire-lowering.test.ts:51like/ilike— its own operator, never folded onto$contains". The caller binds the wildcards.filter-ne-array-schema-door.test.ts:243filter-number-comparand-declared-type.test.ts:59,:174filter-number-comparand-declared-type.test.ts:308aggregatedandboundByDriver— the refusal says only what is true at its position". The refusal names an aggregated column as such, and names the PostgreSQL server error only where the driver binds.filter-operator-vocabulary.test.ts:82,:89filter-operator-vocabulary.test.ts:121$icontainsreplaced$regex". Option B:$regexretired,$icontainsadded.filter-preset-comparand.test.ts:31filter-save-door-face-parity.test.ts:308,:309it.eachlabels: "an implicit list (an equality-slot refusal, unchanged)" and "a $eq list (an equality-slot refusal, unchanged)". Ruling A: the save door refuses an array in the equality slot.filter-text-comparand.test.ts:51filter-text-conformance.test.ts:162filter-text-operator-declared-type.test.ts:184Subject restored (4 ids): #5222 and #7597 at
filter-comparand-type.test.ts:225("leaves a FieldReference alone at every position — cross-field push-down, scalar comparison and the$eqlowering own its fate"), #8296 atfilter-dotted-head.test.ts:40("a virtual head is refused: the unmaterializable-field verdict finally reaching the dotted spelling") and #19514 atfilter-save-door-face-parity.test.ts:743("… and the text-comparand arm stays silent").Dropped only (72 ids): #5146 (2), #5234, #5240, #5298 (3), #5701, #5869, #7536 (2), #7872 (2), #8220, #8793, #8934, #14079, #14426, #15661 (5), #18113 (2), #19514 (3), #19886 (4), #19889 (5), #20116 (7), #20143 (3), #20311 (3), #20336 (5), #20347 (3), #20446, #20502 (8), #20510, #21448 (4).
$ne/$nin/$notContains:driver-sql 排除 NULL 行,driver-memory / formula 返回它们(#5146 只裁定了$not) #5298, "§1 — the enumeration: the save door refuses exactly what the query faces refuse" for 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, or "matchesLikePattern —_is one code point" for 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.§1…§7markers stay. They number each file's own sections, which its comments (// §1 …) and header name; only the card number in front of them goes.filter-cross-field-comparison-class,filter-number-comparand-declared-type,filter-text-operator-declared-type,filter-like-wire-lowering,filter-text-comparand): the verdict's describe now states the decision (above). The others name the contract part they pin (the judged fields, the refusal message, the fixture, the case table), and their child titles state what each part does. The files' header comments still name the records; comments are not touched here.filter-lowering.test.tsNULL_ROWSnames feedit(row.name)and the sevenfilter-save-door-face-parity.test.tslabels feed a%stitle; vitest prints both whole, as the head run's names show.Readers
-t/--testNamePattern.__snapshots__directory is tracked underpackages/spec.packages/spec/vitest.repo-tests.json; all 20 run in thelocalproject.scripts/check-*.mjsself-test reads one. The 7 needle hits fall on 5 lines: a code comment infilter-comparand-type.ts:392, and sibling titles inobjectql(engine-number-comparand-declared-type-door.test.ts:447,:459,:484) andrest(data-number-comparand-door.test.ts:269). None reads a spec test title.scripts/check-driver-conformance.mjsnamesfilter-text-conformance.ts, the source module, not the test file's titles. The other references to these file names are code comments, plus one design-doc line (docs/design/predicate-compilation-convergence.md:377) that points atfilter-lowering.test.ts'sINTRODUCEDconstant, not at a title.Text-only proof
Stage 10's scratch tool (
textonly10.cjs, md5d5e4801dbb4329ab1984da91e92fc47c) compares base and head file by file on three legs:#plus digits after. The declared lines arefilter-lowering.test.ts:81,:83,:85,:93and:95,filter-operator-vocabulary.test.ts:82and:89,filter-save-door-face-parity.test.ts:308,:309,:311to:314and:743, andfilter-text-conformance.test.ts:162.+and-lines are exactly the 96 planned lines, and every file keeps its line count.expectmessage changed VIOLATION; a title re-split into a+chain DIFF.Test counts: the 20 files were run at the base, in a separate base worktree, and at the head, with
--project local --project repo. Both sides read 671 tests, all passed, with the same count and status sequence per file in 20 of 20. 543 full test names change, and each equals the base name with the planned replacements applied (0 mismatches). No full name repeats on either side.mainsince the baseRe-fetched just before this PR opened,
origin/mainwas three commits past the base (5b2d189e28). None of them touchespackages/specor any of the 20 files, somainwas not merged.Changeset:
skip-changesetMeasured, not assumed:
npm pack --dry-runof@objectstack/speclists 2068 files. 0 of the 20 touched files are in it, and no*.test.tsat all. The controlssrc/data/filter.zod.tsanddist/index.mjsare in it.dist/, a new phrase and an old literal each read in 0 files. The controlUnrecognized keyreads in 42.So this PR publishes nothing, and no changeset is added.
Verification (at
2ceeffd7e7)pnpm turbo run buildover all packages: 71 / 71.@objectstack/spec:vitest run --project local: 615 files, 18384 passed, 1 todo.typecheckexit 0, includingcheck:test-typecheck(52 files / 246 errors / 135 pinned signatures held). Its program holds all 20 touched files, counted withtsc --listFilesOnly -p tsconfig.test.json.check:generated: all 15 generated artifacts up to date.dispatch-gates --commandsderived 79 families, the same set as stages 13 to 16, and all 79 exit 0.--ranreconciles: 79 derived, 79 run, 0 NOT-MEASURED, 0 UNRUN, every family with its exit code recorded.check:meta-url-spelling,check:spec-changes,check:authz-resolver,check:error-code-casingandcheck:filter-alias-parity.--no-inline-configover the 20 files reads 0 errors and 0 warnings. The population comes from ESLint's own config: 20 configured, 0 ignored. No file setsparserOptions.projectorprojectService, so no untouched file's verdict can move.check-governed-merges --test: NOT governed, 192 changed lines.Acceptance notes
packages/spec/src. Two are in the nextdata/group (data/filter.test.ts:576and:679), and four are inui/(component-object-grid-default-filters.pin.test.ts:56,component.test.ts:3518,dataset-filter-nested-relation-list.test.ts:220,view-filter-rule-value-shape.test.ts:249).describe/it/testlines outsidepackages/specfinds 187 lines in 16 packages and one example app citing ids this PR handled:driver-sql32 (14 files),service-analytics32 (18),formula24 (9),lint21 (8),objectql21 (11),driver-memory13 (10),driver-turso11 (10),plugin-security9 (5),driver-mongodb8 (5),driver-sqlite-wasm6 (5),rest3 (2),cli2,metadata-protocol2, and one each incore,runtimeandexamples/app-todo.// [#21448]line abovefilter-save-door-face-parity.test.ts:311and the header offilter-operator-vocabulary.test.ts. Comments are not this card's share, and none is touched here.Generated by Claude Code