test(spec): the second data/ file group's test titles state each cited decision in words instead of a tracker number (stage 16) - #21831
Merged
Conversation
…d decision in words instead of a tracker number (stage 16) Twenty test files directly under packages/spec/src/data/, from default-value-shape.test.ts through filter-comparand-shape.test.ts: every test title and declared test string that carried a tracker id now states the cited decision in words, or drops the number where the title already says it. Text only: no assertion, identifier, 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 16 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 second name-ordered file group directly underpackages/spec/src/data/: the 20 test files fromdefault-value-shape.test.tstofilter-comparand-shape.test.ts. They carried 94 messages and 100 tracker ids, citing 59 records plus one decision-batch number. 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 (
a3ffc4512d)Instruments:
census10.cjs(md59d08602ab972b4b8643c90d64d40fa41),census.cjs(md56e42a45a926d375013c32d62f16a296e),census-wide.cjs(md5c98410a19529c439adb0afbfb00026a2) anddirtable.cjs(md5dda605c54745b4a60cc14c9a686e4eff). They are byte-identical to the copies stages 10 to 15 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 1231 messages / 1304 ids in 262 files, the seat's reading at
a3ffc4512d(stage 15's head).ui/data/(this PR: the second 20 files)api/system/src/)ai/contracts/The group reads 94 messages / 100 ids in 20 files, the seat's figures, file for file:
data/)default-value-shape.test.tsdefault-value-tokens.test.tsdocument.test.tsdriver-nosql.test.tsdriver.test.tsesignature-deadline-keys-retirement.test.tsexternal-lookup-retirement.test.tsfeed.test.tsfield-autonumber-default-format.test.tsfield-autonumber-default-unique.test.tsfield-autonumber-readonly.test.tsfield-currency-scale-refused.test.tsfield-default-value.test.tsfield-rows-option-description.test.tsfield-value.test.tsfield.test.tsfilter-array-declaration.test.tsfilter-ascii-fold.test.tsfilter-boolean-comparand-declared-type.test.tsfilter-comparand-shape.test.tsdata/filter-comparand-type.test.ts, outside the group, reads 9 / 10 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-array-declaration.test.tsreads 0 / 0 at the head while 9 of its comment lines still carry a number. Planted in a scratch copy of the headdata/filter-ascii-fold.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 in 19 of the 20 files. Infield.test.tsit reads four more, at both base and head: the hex colours#00FF00/#00AA00in option fixtures (:859,:1461,:1476,:1484), which are not tracker ids.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 15's re-cut named this group at exactly 100, and this census reads 100, so the rule needed no re-cut.Named for the next stages (re-cut from the head census, 1137 / 1204;
data/280 / 299 left, the same cut stage 15 named):data/in three more stages, name-ordered:filter-comparand-type.test.tstofilter-view-operator-parity.test.ts: 20 files, 95 messages / 99 ids;filter.test.tstoobject.test.ts: 17 files, 103 / 114.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/416, 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
31 literals (36 ids) now state a decision in words. 2 literals (2 ids) get their subject back in words where the number stood in for it. 61 literals (62 ids) drop a number the title already explains.
Every cited record was read with its comments through REST: 56 answer 200, the four
objectuirecords among them. #8656, #12868 and #16867 answer 404, and their decisions were read from what landed:94f7ef8(aField.timebuilder that produces the literal shape an author could already write),c459da6bc(the form-view option shape is the object-field option shape minusdefault) and0ee32ed(the flatnotNullspellings prescribestorage.notNull, notrequired), each with its CHANGELOG entry.data/)default-value-tokens.test.ts:15document.test.ts:238,:255driver.test.ts:112findStreamhad no caller and was retired; thestreamingbit described it.driver.test.ts:399driver.test.ts:428external-lookup-retirement.test.ts:89,:130feed.test.ts:22field-autonumber-readonly.test.ts:82field-default-value.test.ts:98postal_code, as the showcase seed once wrote it)". The seed's key was corrected topostalCode.field-default-value.test.ts:116,:123field-rows-option-description.test.ts:52rowson the multiline editor types — declared because the editor widget reads it". Option A: validation and the running widget agree.field-rows-option-description.test.ts:162description— declared because the lookup widget reads it", the inherited ruling for a consumed key.field-rows-option-description.test.ts:192default)".field.test.ts:197currencykey guidance, namingcurrencyConfig.defaultCurrency". The refusal gained a prescription; nothing it accepts moved.field.test.ts:997deleteBehaviormaterializes only on reference types. #4447 is dropped: "installed-base artifact shape" already says why the key must stay legal.field.test.ts:1174field.test.ts:1434field.test.ts:2105radio+multiple: trueis REFUSED (ruled: at the entrance, never rendered as checkboxes)". Option C; option A was not taken.field.test.ts:2191multiple: trueon a NON-MULTI-CAPABLE type is REFUSED (ruled: one definition of multi-value, the radio rule generalised)". Option 1′ of decision batch 128, item 5. That batch number went with the id.field.test.ts:2320placeholderis a DECLARED key (ruled: the renderers already apply it)". Option C: the producer moves.field.test.ts:2393maskingRuleis a DECLARED key (ruled: partial masking, enforced at runtime)". Option A: partial masking as a runtime-first capability, declared only with its enforcement.field.test.ts:2476filter-array-declaration.test.ts:142filter-array-declaration.test.ts:233filter-ascii-fold.test.ts:32filter-boolean-comparand-declared-type.test.ts:138filter-comparand-shape.test.ts:779,:1068Subject restored (2 ids): #16077 at
default-value-shape.test.ts:172("the rename preference is a NO-OP for a class that cannot emitunrecognized_keys"; without its number the title would have read as ifcheckLiteralDefaultValueitself were the no-op) and #21382 atfilter-boolean-comparand-declared-type.test.ts:195("the accepted set is unchanged — the non-string widening adds refusals only").Dropped only (62 ids): #2004, #3855 (2), #4001 (3), #4455, #4634 (2), #5628, #5869, #6555, #7127 (3), #7768, #8075, #8321 (2), #8371, #9228, #9689 (4), #9784, #11566, #11949, #13053, #13671, #13802, #13894, #14168, #14477 (4), #15680, #16077 (3), #16867, #18972, #19629 (3), #19992 (5), #20740, #21333 (5), #21382 (4), #21448.
deleteBehavior: 'set_null'on amaster_detail, and the engine silently resolves it tocascade#9689, "the list-comparand shape door runs inside parseFilterAST" for 数据 API:集合算子not_in/in的比较值是标量(非数组)时答 500 DATABASE_ERROR,而不是带信封的 400 —— 而这个形状是 spec 合法的 ViewFilterRule #5869 and The #5869 list-comparand rule is enforced only at the engine seam: a scalarin/nincomparand still reaches a driver, and on mingo >= 7.2.3 it escapes as a rawTypeError#9228, or "refusesprecisionat EVERY value, in range or not: the key was removed, not re-bounded" for [finding] currencyConfig.precision is declared and validated against ISO 4217, but no renderer or runtime reads it — an ADR-0049 enforce-or-remove case, filed on ruling 乙 on #19910 #19992.driver-nosql.test.ts:375now reads "NoSQLQueryOptions.timeout carries its unit", the same text stage 14 gaveai/conversation.test.ts, so the two read alike.filter-boolean-comparand-declared-type.test.ts: its six describes and fiveits carried the two records as a file-wide tag. The verdict's describe now states the decision (above). The others name the contract part they pin (the accepted spellings, the judged fields, the refusal message, the fixture, the case table), and their child titles state what each part does. The file's header comment still names both records; comments are not touched here.(the #9689 class)tails on three idempotency titles go: each title already says "parse(parse(x)) is byte-identical" or "re-parses cleanly", which is what that class names.Readers
--testNamePatternandvitest … -tfinds only the option name inpackages/qa/vitest-filter-preflight/src/project-cli-override-preflight.ts:212, which filters nothing..snapfile or__snapshots__directory is tracked underpackages/spec.packages/spec/vitest.repo-tests.json; all 20 run in thelocalproject.scripts/check-*.mjsself-test reads one. The 33 needle hits fall on 18 lines:data/driver/memory.test.ts:548anddata/driver/turso.test.ts:172(the lastdata/group),ui/dashboard.test.ts:717("carries its unit");system/message-queue-retirement.test.ts:87and:127, the twin expect messages of the twoexternal-lookup-retirement.test.tsstrings;system/translation.test.ts:767("unknown-key strictness");ui/action.test.ts:1245("alias is REMOVED");objectqlengine-aggregate-flag-comparand-refusal.test.ts:187,service-analyticswhere-boolean-flag-refusal.test.ts:197andwhere-empty-operator.test.ts:130(all[#21448] a LIST …);field.zod.ts:2264,driver-sqlsql-driver.ts:20176,cligenerate.ts:30,filter-comparand-shape.ts:735and:802,filter-comparand-type.ts:116and:228, and onepackages/spec/CHANGELOG.mdentry. None reads a test title.driver-nosql.test.ts:375((#15680)) is the one in this group, rewritten as above.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 areexternal-lookup-retirement.test.ts:89and:130,field-default-value.test.ts:98,:116and:123, andfilter-array-declaration.test.ts:142.+and-lines are exactly the 94 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 766 tests (765 passed, 1 todo), with the same count and status sequence per file in 20 of 20. 503 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 six commits past the base (088428fb42). None of them touches any of the 20 files, somainwas not merged. Two of them touchpackages/specsource (ui/report.form.tsanddata/object.zod.ts); this diff changes only test-title text, so it cannot combine with them into a joint failure, and the merge queue re-runs the suite on the merged generation.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/field.zod.ts,src/data/filter.zod.tsanddist/data/index.jsare in it.dist/, five new phrases and four old literals each read in 0 files. The controlUnrecognized key(s) onreads in 42.So this PR publishes nothing, and no changeset is added.
Verification (at
95baf08ba9)pnpm turbo run buildover all packages: 71 / 71.@objectstack/spec:vitest run --project local: 615 files, 18360 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 15, and all 79 exit 0.--ranreconciles: 79 derived, 79 run, 0 NOT-MEASURED, 0 UNRUN, every family with its exit code recorded.mainmoved past the base during verification andscripts/engine-double-contract.pinned.jsonchanged there.check:engine-double-contractexits 0 on this tree, this diff touches no engine double, and the queue re-runs the family on the merged generation.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, 188 changed lines.Acceptance notes
packages/spec/src(14 in laterdata/groups, 9 insystem/, 23 inui/). Among them,ui/view.test.ts:1893("leaves the malformed-declaration refusals (spec:Field.scaleaccepts meaningless declarations (2.5,-1) — now that scale is enforced, malformed declarations should be refused at authoring time #8321/spec/ui: FormField minLength/maxLength (and the number-constraint quartet) still carry the pre-#11566 shape — z.number().optional(), no integer/positivity validation #12174) reading exactly as before") andui/action-param-default-value.test.ts:154(#16077 carries the rename …) are near-twins of titles rewritten here.describe/it/testlines outsidepackages/specfinds 111 lines in 15 packages citing ids this PR handled:objectql47 (22 files),driver-sql18 (13),rest15 (12),driver-mongodb6 (3),lint5 (4),plugin-security5 (2),cli3 (2),core2,driver-memory2,metadata-protocol2,service-analytics2, and one each indriver-turso,plugin-audit,qa/dogfoodandservice-automation.src/carry same-id titles:packages/spec/scripts/check-generated-ledger.test.ts:100andpackages/spec/scripts/file-description.test.ts:66. They are outside class (e) as ruled ("the test strings shipped undersrc/").filter-boolean-comparand-declared-type.test.ts, the block abovefilter-array-declaration.test.ts:233, and thefield.zod.tsdocblocks naming the shadowing mechanism. Comments are not this card's share, and none is touched here.Generated by Claude Code