test(spec): the last data/ file group's test titles state each cited decision in words instead of a tracker number (stage 19) - #21882
Merged
Conversation
…decision in words instead of a tracker number (stage 19) The 11 test files directly under packages/spec/src/data/ from query-transport.test.ts through validation.test.ts, and the seven id-bearing files in data/driver/: 81 test titles and one expect message, 86 tracker ids in 82 literals. Each id is either replaced by the decision its record made, stated in words, or dropped where the title already says it. Text only: no assertion, identifier, comment or line count changes. 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 19 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 lastdata/group: the name-ordered test files directly underpackages/spec/src/data/fromquery-transport.test.tstovalidation.test.ts, plusdata/driver/. Those 18 files carried 82 messages and 86 tracker ids, citing 39 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. After this PRdata/carries no tracker id in a test string.Census at the base (
124533b388)Instruments:
census10.cjs(md59d08602ab972b4b8643c90d64d40fa41),census.cjs(md56e42a45a926d375013c32d62f16a296e),census-wide.cjs(md5c98410a19529c439adb0afbfb00026a2) anddirtable.cjs(md5dda605c54745b4a60cc14c9a686e4eff). They are byte-identical to the copies stages 10 to 18 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.The base is
124533b388, the claim's base and stage 18's landing. Both instruments read 942 messages / 994 ids in 208 files, the seat's reading and stage 18's head reading.ui/api/system/src/)data/(this PR)ai/contracts/The group reads 82 messages / 86 ids in 18 files, the seat's figures, file for file: 11 files directly under
data/(34 ids) and 7 indata/driver/(52 ids).data/)driver/config-registry.test.tsdriver/driver-credential-refusal.test.tsdriver/driver-placeholder-refusal.test.tsdriver/memory.test.tsdriver/pg-url-grammar.test.tsdriver/postgres.test.tsdriver/turso.test.tsquery-transport.test.tsquery.test.tsrecord-surface.test.tssearch-fields.test.tssecret-mask.test.tsseed.test.tstree-reference-self-only.test.tsunique-scope-message.test.tsunique-scope.test.tsvalidation-boundary-description.test.tsvalidation.test.tsThe one "other" string is the
expectmessage atquery.test.ts:202, declared to the text-only tool. Three more test files sit in the same name range and carry no id:seed-loader,type-compatanddriver/mongo. They are not touched.ui/dashboard.test.ts, outside the group, reads 21 ids at the head as at the base. Dark:search-fields.test.tsanddriver/driver-credential-refusal.test.tsread 0 at the head while 16 and 29 of their comment lines still carry a number. Planted in scratch copies of head files: an id put into aseed.test.tstitle reads 1 / 1, and an id put into asecret-mask.test.tscomment reads 0.#plus digits) reads the same totals as the gate pattern in all 18 files at the base, and 0 in all 18 at the head.data/reads 0 / 0, and no other file moved.How the area was chosen
data/has been taken in name-ordered file groups near the ~100-id bound. Stage 18's re-cut named this group at 86 ids, the whole remainder ofdata/, and this census reads 86, so the rule needed no re-cut.Named for the next stages (re-cut from the head census, 860 / 908):
ui/419 ids in 84 files, about four stages. It has no subdirectory, so the same name-ordered rule applies. The first group near 100 runs fromaction-confirm-params-guard.test.tstocomponent-record-block-field-security.test.ts: 32 files, 97 messages / 102 ids. It holds three "other" strings: twoexpectmessages inaction-requires-confirmation-docblock.pin.test.ts(:168,:175) and one incomponent-props-unknown-members.pin.test.ts(:322). That stage should check whether any of them is a needle.api/201, two stages.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
external.credentialsRefbound + aconfig.urlnaming no user" — the binding is a silent no-op at connect #9041 arm".Every cited record was read with its comments through REST. 33 answer 200. Six answer 404, and each decision was read from what landed, the landing commit and its CHANGELOG entry:
--database-driver/OS_DATABASE_DRIVER)在 CLI 与 standalone stack 之间仍有三处分叉(#6265 后续) #6345 (e2798fab76, one driver vocabulary:mongo→mongodb, turso gets a config contract);${…}placeholders — the #8336 shape one surface over, deliberately outside its connection-material class #8495 (4bfe1a539d,${…}refused in memorypersistence.path/persistence.keyat publish);external.credentialsRefis silently dropped on the DSN branches of the mysql and mongodb driver arms #8696 (90a12fb18d, a bound secret injected on the mongodb DSN branch);@objectstack/spec/dataowns the userinfo grammar but exports only its password half — the mongo DSN arm cannot inject a bound credential without a username accessor #8876 (d634e665b0,urlUserinfoUsername, the username half of the userinfo grammar);config.options.auth.passwordis a fourth spelling of an inline credential — authorable, persisted cleartext, unredacted, and read by the client #9040 (24206416a7, a credential in the mongooptionspassthrough refused at publish);external.credentialsRefbound + aconfig.urlnaming no user" — the binding is a silent no-op at connect #9041 (d491625c17, boundcredentialsRefwith a user-less mongoconfig.urlrefused at publish).Stated in words:
data/)driver/config-registry.test.ts:71data/driver/became the one contract, andDatasourceSchemaparsesconfigagainst it.driver/config-registry.test.ts:178--database-driverlists were replaced by a set derived from the shared table.driver/driver-credential-refusal.test.ts:851user@hostand bind the secret.driver/driver-placeholder-refusal.test.ts:234initialDatastays UNJUDGED — the deliberate seed-data exclusion holds". The placeholder refusal excluded seed data; #8495 extended it topersistence.path/persistence.keyonly.driver/pg-url-grammar.test.ts:39pgitself runs". A postgresconfig.urlthatpgcannot open is refused at publish.driver/pg-url-grammar.test.ts:55pgparse". Ruled option A: abrowserexport condition whose bundle drops thepgparse.query-transport.test.ts:38QuerySchemaitself does not grow.query.test.ts:202(expectmessage)order: ascbefore the sort node was closed". Ruled (a)+(b):SortNodeSchemastrict, withdirection→orderas a prescription.record-surface.test.ts:59record-surface.test.ts:64search-fields.test.ts:120$searchFieldsentry no longer admits$searchFields=id". Ruled: an unknown or unsearchablesearchFieldsentry answers 400, never a wider scan.search-fields.test.ts:257secret-mask.test.ts:40unique-scope-message.test.ts:137truekeeps its meaning". Ruled: no unannounced reinterpretation of bareunique: true.unique-scope.test.ts:19trueon a field is unique per organization; global uniqueness must be said". Field-leveltruebecame a composite per-organization index, and'global'the explicit opt-in.validation.test.ts:1120deletefrom the enum, not enforce it.Subject back in words (12 literals, 15 ids). In
driver/driver-credential-refusal.test.tsanddriver/driver-placeholder-refusal.test.ts, numbers that named a sibling refusal now name it: "#9041" becomes "the user-less URL arm" or "the user-less URL refusal", "#9147's arm" becomes "the no-username arm", "#9040" becomes "the options-passthrough credential refusal" or "the passthrough read path", "#8082" becomes "the URL userinfo refusal" or "check", "the inverted #8078 pin" becomes "the pin that once recorded them as accepted, inverted", "#8336" in "the deep judgement" becomes "the deep placeholder judgement", and "the honest #4410 boundary" becomes "the honest boundary of config validation".Dropped where already stated (54 literals, 54 ids). A number goes only where the title already says its decision. Examples: "QueryAST.joins — REMOVED (#4286)" and its three siblings; "FieldNode — the nested-select object form is REMOVED (#4196)"; "AggregationNode.distinct — REMOVED (#6815, ADR-0049)", which keeps
(ADR-0049); the four#13879 —describe prefixes, each of which states its semantics; "$driver— inline credential refusal (#7990)" and the other refusal-family describes; "TursoConfigSchema refuses what the turso driver refuses (#19977)".(ADR-0049),(ADR-0100)and(ADR-0120)stay: they cite decision records by number, not tracker ids.Readers
-t/--testNamePattern.__snapshots__directory is tracked underpackages/spec, and none of the 18 files calls a snapshot matcher.packages/spec/vitest.repo-tests.json; all 18 run in thelocalproject.scripts/check-*.mjsself-test reads one. The 11 hits are:searchFields/groupBy/aggregations指向不存在的字段时被静默降级(#4226 收口后剩下的三条轴) #4254 ingress gate" (lintvalidate-searchable-fields.ts/.test.ts,validate-react-page-props.test.ts,metadata-protocolprotocol.search-title-namefield.test.ts,specdata/search-fields.ts:198);ui/stage (ui/dashboard.test.ts:717);metadata-protocol(protocol.query-transport-dialect.test.ts:176).None reads a spec test title.
data/query.test.tsis named bytest-typecheck-debt.json, which keys on the file and on error signatures, not on a title, and by two code comments;data/secret-mask.test.tsby one code comment.Text-only proof
Stage 10's scratch tool (
textonly10.cjs, md5d5e4801dbb4329ab1984da91e92fc47c) compares base and head file by file on three legs:#plus digits after. This stage declares one line,query.test.ts:202.+and-lines are exactly the 82 planned lines, and every file keeps its line count.it.eachrow given an id VIOLATION; an undeclaredexpectmessage changed VIOLATION; a title re-split into a+chain DIFF..eachtitles: fivedescribe.eachtitles lose only their trailing id. No$driver/$nameplaceholder, row or table value changes.Test counts: the 18 files were run at the base, in a separate base worktree, and at the head, with
--project local --project repo. Both sides read 737 tests, all passed, with the same count and status sequence per file in 18 of 18. 476 full test names change, and each equals the base name with the planned replacements applied (0 mismatches). No full name repeats on either side.Changeset:
skip-changesetMeasured, not assumed:
npm pack --dry-runof@objectstack/speclists 2068 files. 0 of the 18 touched files are in it, and no*.test.tsat all. The controlssrc/data/query.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
8788de7a4a)pnpm turbo run buildover all packages: 71 / 71.@objectstack/spec:vitest run --project local: 616 files, 18426 passed, 1 todo.typecheck: exit 0, includingcheck:test-typecheck(52 files / 246 errors / 135 pinned signatures held). Its program holds all 18 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 18, 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.STALE TREE:scripts/engine-double-contract.pinned.jsonmoved onmainafter the base. This diff adds and changes no engine double,check:engine-double-contractexits 0 on this tree, and the queue re-runs it on the merged generation.--no-inline-configover the 18 files reads 0 errors and 0 warnings. The population comes from ESLint's own config: 18 configured, 0 ignored. No file setsparserOptions.projectorprojectService, so no untouched file's verdict can move.check-governed-merges --test: NOT governed, 164 changed lines.mainsince the baseRe-fetched just before this PR opened,
origin/mainwas two commits past the base (5e0b489bca: #21871, #21873). Neither touches any of the 18 files, and neither touchespackages/spec. Somainwas not merged.git merge-treeonto5e0b489bcais clean. No open PR touches the 18 files.Acceptance notes
expectmessage, not the expected value of an assertion over a source docblock. The three known needles are untouched.api/protocol.test.ts:677([P2] data:QueryASTdeclares 12 members no executor runs — the liveness ledger governs metadata types, not the request surface #4286),ui/dashboard.test.ts:717([#14478 stack 5/6]data/·ui/·ai/·integration/: the 7 remaining duration keys carry their unit in the key name — ADR-0087 conversions with readers #15680) andui/view-authoring-wire-split.test.ts:192(一个被静默丢弃的排序键对外部调用方仍然是静默的:direction该 400 还是继续被丢掉(#4674 第 4 项) #4721).describe/it/testlines outsidepackages/spec/srcfinds 49 lines citing ids this PR handled, in 12 packages:service-datasource18 (8 files),metadata-protocol7 (4),objectql6 (4),cli5 (3),lint4 (3),driver-sql3 (3), and one each inclient,driver-turso,platform-objects,plugin-security,restandservice-settings. Examples:cli/src/commands/database-driver-flag-derivation.test.ts:63("--database-driver的 oclif 白名单改为从共享驱动表推导 —— 裁定第 3 项「一个词表、一处推导」的后半(阻塞于 PR #6910) #6969 — …"),driver-sql/src/sql-driver-unique-tenancy.test.ts:48("(多租户缺陷:unique 物化为全局唯一索引、无视 tenancy,与按租户分裂的 autonumber 序列自相矛盾(跨租户必然撞号 + 存在性探测泄露) #3696)"),lint/src/validate-searchable-fields.test.ts:809("[A virtual formula field declared in searchableFields clears lint and the #4254 gate, then silently matches nothing — the same fail-open shape #4254 closed one axis over #6674] …").[#6674]and[#4483]blocks insearch-fields.test.ts, the[#16066]header ofquery-transport.test.tsanddata/search-fields.ts:198. Comments are not this card's share, and none is touched here.Generated by Claude Code