Repository navigation
test(spec): the first data/ file group's test titles state each cited decision in words instead of a tracker number (stage 15) - #21810
Merged
Conversation
… decision in words instead of a tracker number (stage 15) Twenty test files directly under packages/spec/src/data/, name-ordered from aggregate-field-type-compatibility.test.ts through date-range-presets.test.ts: 94 messages / 102 ids. Each id becomes a statement of the decision the cited record made, or is dropped where the title already says it. Text only: no assertion, identifier, code comment or non-test file changes, and every file keeps its line count. 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 was referenced Oct 5, 2026
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 15 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 first name-ordered file group directly underpackages/spec/src/data/: the 20 test files fromaggregate-field-type-compatibility.test.tstodate-range-presets.test.ts. They carried 94 messages and 102 tracker ids, citing 60 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 (
0a3480311a)Instruments:
census10.cjs(md59d08602ab972b4b8643c90d64d40fa41),census.cjs(md56e42a45a926d375013c32d62f16a296e),census-wide.cjs(md5c98410a19529c439adb0afbfb00026a2) anddirtable.cjs(md5dda605c54745b4a60cc14c9a686e4eff). They are byte-identical to the copies stages 10 to 14 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 1325 messages / 1406 ids in 282 files, the seat's reading at
0a3480311a(stage 14's head).data/(this PR: the first 20 files)ui/api/system/src/)ai/contracts/The group reads 94 messages / 102 ids in 20 files, the seat's figures, file for file:
data/)aggregate-field-type-compatibility.test.tsanalytics-date-range-closed-vocabulary.test.tsanalytics-date-range-two-bound-window.test.tsanalytics-query-window-integer.test.tsanalytics-strictness-batchd.test.tsanalytics.test.tsapi-derivation.test.tsapi-methods-batch-conformance.test.tsauthoring-key-lint.test.tsautonumber-format.test.tsautonumber-unanchored-boundary.test.tsbulk-write-hook-conformance.test.tscalendar-day.test.tscontext-tokens.test.tscurrency-mode-family-closure.pin.test.tscurrency-precision-iso4217.test.tsdata-engine.test.tsdatasource-credential-redaction.test.tsdatasource.test.tsdate-range-presets.test.tsdata/document.test.tsreads 2 / 2 at the head. Lit, "other" strings: the two indata/external-lookup-retirement.test.ts(:89,:130) still read at the head. Dark: the file comment atdata/analytics-strictness-batchd.test.ts:4(it names the strictness batch by its number) reads 0. Planted in a scratch copy of the headdata/calendar-day.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. Inaggregate-field-type-compatibility.test.tsit reads one more, a decision-batch number at:150that sits beside a cited record in the same literal. The gate's pattern needs three to five digits, so it is not counted there.How the area was chosen
data/has no subdirectory to split by (449 ids directly under it,data/driver/52), so its stages take name-ordered file groups near the ~100-id bound, as stage 14's report proposed. This census reads the first group at exactly 102, the claim's figure, so the rule needed no re-cut.Named for the next stages (re-cut from the head census, 1231 / 1304;
data/374 / 399 left):data/in four more stages, name-ordered:default-value-shape.test.tstofilter-comparand-shape.test.ts: 20 files, 94 messages / 100 ids;filter-comparand-type.test.tstofilter-view-operator-parity.test.ts: 20 files, 95 / 99;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
24 literals (28 ids) now state a decision in words. 2 literals (2 ids) get their subject back in words where the number stood in for it. 69 literals (72 ids) drop a number the title already explains. (95 literals in 94 messages: the
sys_organizationreason string is one message over two lines.)Every cited record was read with its comments through REST: 55 answer 200. #6345, #8876, #9040, #10194 and #17014 answer 404, and their decisions were read from what landed:
e2798fa(one driver vocabulary for start and migrate),d634e66(the username half of the URL userinfo grammar),2420641(a credential in the mongooptionspassthrough is refused),2306a76(theme/analytics_cubevalidated at the/metawrite door) and80aef80(a one-day window for the one-day presets), each with its CHANGELOG entry. No cross-repo record is cited in this group.data/)aggregate-field-type-compatibility.test.ts:150sum/avg/min/maxover booleans — numbers on every backend, a ruling that outranks the refused-by-default rule". The maintainer ruled that booleans aggregate as numbers on every backend; decision batch 80 held that ruling over batch 59's blanket refusal of unnamed pairs. That batch number went with the id.analytics-strictness-batchd.test.ts:83,:248,:306analytics-strictness-batchd.test.ts:270,:297AnalyticsQuery; the{ cube, query }envelope was retired with tombstones, and the entry answers 400 with a hint atwhere.analytics.test.ts:314sql/relationshipare stripped (ADR-0087 D2)".api-derivation.test.ts:16api-derivation.test.ts:286api-methods-batch-conformance.test.ts:221update; both are column-clamped per row by ADR-0092 D2)". Option (a), decision batch 64.authoring-key-lint.test.ts:37autonumber-format.test.ts:23{0000}became the contract default, and both fallbacks went away.bulk-write-hook-conformance.test.ts:114bulk-write-hook-conformance.test.ts:119currency-mode-family-closure.pin.test.ts:348defaultCurrencyholds only underfixed".currency-precision-iso4217.test.ts:163currencyConfig.precisionat rest: a stored row carrying the bakedprecision: 2is served canonical".currency-precision-iso4217.test.ts:224data-engine.test.ts:1185data-engine.test.ts:1198datasource-credential-redaction.test.ts:70datasource-credential-redaction.test.ts:232datasource-credential-redaction.test.ts:243datasource.test.ts:673external.credentialsRef, and only it, on managed rows.date-range-presets.test.ts:14Subject restored (2 ids): #20126 at
currency-mode-family-closure.pin.test.ts:403("currency-mode closure controls — each rule can fail, and passes what it must") and #7918 atcurrency-precision-iso4217.test.ts:311("carries the measured anchors — 0 digits for JPY, 2 for USD, 3 for KWD"). That literal moved from double to single quotes, since it no longer holds an apostrophe.Dropped only (72 ids): #1603, #2377, #3026, #3391, #3543, #3545, #3795 (9), #4001 (2), #4286, #4346 (2), #4538, #4583, #5586, #6345, #6555, #6560, #7178 (5), #7265, #7287 (2), #7802 (2), #8032, #8057 (2), #8153 (7), #8336, #8337, #9040, #10194, #10414, #13802, #16041, #16632, #17014, #17296, #17598 (2), #18278, #19992 (3), #20011, #20300 (2), #20550, #20600, #20808 (3), #21365 (2).
EngineQueryOptionsSchema.searchrejects the bare query string that ADR-0061 D1 calls canonical — so every engine caller that wants it mustas any, losing the whole query's checking #7178, or "currencyConfig.precisionis removed: refused with the prescription, whatever its value" 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.analytics-strictness-batchd.test.ts:307reads "are CLOSED now" where it named the record;autonumber-unanchored-boundary.test.ts:51reads "(ruled: mixed content is out of contract)";datasource.test.ts:553reads "(the happy path)". The circled part numbers afterAnalyticsDateRangeSchema's array arm admits shapes every consumer now refuses, and the one shared refusal sentence is false for them #17598 went with the id.api-methods-batch-conformance.test.tsreason strings (sys_api_key,sys_organization) end "rather than hitting /batch." now. The table is read only through!== undefined, so no assertion reads their text.Readers
-tand--testNamePatternfinds onlypackages/qa/dogfood/README.md:142(-t "owner-scoped"), which is unrelated.__snapshots__directory exists underdata/, and no.snapfile is tracked underpackages/spec.packages/spec/vitest.repo-tests.json:api-methods-batch-conformance.test.tsandcurrency-mode-family-closure.pin.test.ts. Both were run in therepoproject at the base and at the head, and the other 18 inlocal.scripts/check-*.mjsself-test reads one. The 14 hits are:service-analyticsaggregate-nontemporal-measure-refusal.test.ts:344andobjectqlengine-autonumber-default-format.test.ts:248;data/stage:data/driver/postgres.test.ts:169, the same "placeholders are not resolved here" title, already in the census;lintvalidate-dataset-measure-aggregates.test.ts:179,service-analyticsdataset-compiler.ts:227,objectqlengine.ts:6206and:6272,analytics.zod.ts:1002,docs/audits/2026-07-unknown-key-strictness-ledger.md:728, twopackages/spec/CHANGELOG.mdentries and theliveness/field.json:218evidence string, which quotes theengine.tscomment. None reads a test title.(#15680),(#5955),#3896 close-out): none falls in this group.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 are the three reason-string leaves inapi-methods-batch-conformance.test.ts.+and-lines are exactly the 95 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 553 / 553 passed, with the same count and status sequence per file in 20 of 20. 291 full test names change, and each equals the base name with the planned replacements applied (0 mismatches). No full name repeats on either side.mainmerged in, once#21800 (the console pin bump) landed while this branch was being verified, and it rewrites the comment block at
:61-77ofapi-methods-batch-conformance.test.ts. This PR edits only string literals in that file, more than 100 lines below the block, soorigin/main(18c2ddc1ec, which also carries #21801) was merged in with a plain merge, no rebase, and no conflict. The PR's delta againstmainis still exactly the 20 files, +95 / -95. Every reading in this body was re-taken on the merged headbf16ad1190, against18c2ddc1ecas the base: the census (1325 / 1406 there, 1231 / 1304 here, unchanged by the two commits), the text-only proof and its controls (the three declared lines now sit at:202,:230and:235), the 20-file runs, the full build, the suite, the typecheck and the gates. Re-fetched just before this PR opened,origin/mainwas one commit further (75ddcd1b41, #21805, incloud-connection,metadata-coreandruntime). It touches nopackages/specpath and no file here, so it was 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. Ofsrc/, only the*.zod.tssources ship: the controlssrc/data/analytics.zod.ts,src/data/data-engine.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
bf16ad1190)pnpm turbo run buildover all packages: 71 / 71 (also 71 / 71 at the pre-merge head89c4b300c2).@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 after the merge.dispatch-gates --commandsderived 79 families, the same set as stages 13 and 14, and all 79 exit 0.--ranreconciles: 79 derived, 79 run, 0 NOT-MEASURED, 0 UNRUN.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, 190 changed lines.Acceptance notes
describe/it/testlines outsidepackages/specfinds 156 lines citing ids this PR handled, in 79 files of 23 packages:objectql73 (29 files),rest18 (7),runtime7 (4),plugin-security6 (5),cli6 (3),lint6 (4),service-datasource6 (3),driver-sql4 (4),platform-objects4 (2),plugin-approvals3 (2),service-automation3 (2),driver-mongodb3 (1),plugin-auth3 (1),service-analytics3 (3),metadata-core2 (1),plugin-hono-server2 (1), and one each inclient,triggers,core,metadata-protocol,qa/dogfood,typesanddriver-memory.src/carry same-id titles:packages/spec/scripts/file-description.test.ts:66andpackages/spec/scripts/format-type.test.ts:85. They are outside class (e) as ruled ("the test strings shipped undersrc/").bulk-write-hook-conformance.test.ts:115-116and:129-130assertengineDeliveryIssue: 5038/5574, numbers in the source contract table. They are not strings, the gate's pattern cannot see them, and they are not this card's share.analytics-strictness-batchd.test.tsand theSINGLE_RECORD_WRITE_ONLYcomments inapi-methods-batch-conformance.test.ts. Comments are not this card's share, and none is touched here.Generated by Claude Code