diff --git a/packages/spec/src/system/auth-config.test.ts b/packages/spec/src/system/auth-config.test.ts index b77b9566293..ab99ea91144 100644 --- a/packages/spec/src/system/auth-config.test.ts +++ b/packages/spec/src/system/auth-config.test.ts @@ -420,7 +420,7 @@ describe('AuthConfigSchema – new passthrough fields', () => { }); }); -describe('AudienceConfigSchema (#11739)', () => { +describe('AudienceConfigSchema — one closed audience posture, invite_only when undeclared', () => { it('defaults an undeclared posture to invite_only (the ruled safe default)', () => { const parsed = AudienceConfigSchema.parse({}); expect(parsed.posture).toBe('invite_only'); @@ -517,7 +517,7 @@ describe('AudienceConfigSchema (#11739)', () => { // `updateAge: this.config.session?.updateAge || 60 * 60 * 24` straight into // better-auth's `session.updateAge`, whose unit is seconds. Only `expiresIn` // carried the marker; this closes the pair. -describe('AuthConfig.session.updateAge declares seconds by mirror (#18124)', () => { +describe('AuthConfig.session.updateAge declares seconds by mirror', () => { it('keeps the bare name, the default and the value it always accepted', () => { expect(AuthConfigSchema.parse({}).session).toBeUndefined(); const parsed = AuthConfigSchema.parse({ session: { updateAge: 3 * 86_400 } }); diff --git a/packages/spec/src/system/book.test.ts b/packages/spec/src/system/book.test.ts index 746cc6bacba..0f5d123f129 100644 --- a/packages/spec/src/system/book.test.ts +++ b/packages/spec/src/system/book.test.ts @@ -363,7 +363,7 @@ describe('resolveDocAudiences — union over claiming books (§6.7)', () => { }); // ── Inline translation maps retired in 17.0.0 (#4667, ADR-0049) ───────────── -describe('retired book translation maps (#4667)', () => { +describe('retired book translation maps', () => { it('rejects a book-level `translations` map and names the live neighbour', () => { // The prescription has to mention `doc.translations`: that key is live on // every doc render path and is what the author actually wanted. Without it @@ -410,7 +410,7 @@ describe('retired book translation maps (#4667)', () => { // book-tree response contract (#12038) // ========================================== -describe('ResolvedBookSchema is the book-tree response contract (#12038)', () => { +describe('ResolvedBookSchema is the book-tree response contract', () => { // The conformance suite for the `GET /meta/book/:name/tree` ledger rows // (#3877's no-row-without-conformance rule). Stronger than the handwritten // captures its meta.* siblings use: `resolveBookTree()` is pure and lives in diff --git a/packages/spec/src/system/cache.test.ts b/packages/spec/src/system/cache.test.ts index 79588e59839..16206238734 100644 --- a/packages/spec/src/system/cache.test.ts +++ b/packages/spec/src/system/cache.test.ts @@ -333,7 +333,7 @@ describe('DistributedCacheConfigSchema', () => { // Asserted on the issue CODE and the prescription text, never on "it threw": // a bare `toThrow()` would stay green against a schema that rejected for any // other reason, which is the failure this pin exists to catch. -describe('cache duration keys carry their unit (#15679)', () => { +describe('cache duration keys carry their unit in the key name', () => { it('REFUSES the retired `CacheTier.ttl` with the rename in the message', () => { const result = CacheTierSchema.safeParse({ name: 'l1', type: 'memory', ttl: 600 }); expect(result.success).toBe(false); diff --git a/packages/spec/src/system/collaboration.test.ts b/packages/spec/src/system/collaboration.test.ts index dd02ec023d0..50821bad75f 100644 --- a/packages/spec/src/system/collaboration.test.ts +++ b/packages/spec/src/system/collaboration.test.ts @@ -1002,7 +1002,7 @@ describe('CollaborationSessionSchema', () => { // collision that got this population ruled: milliseconds here, seconds on the // tenant surface. Both old spellings are `retiredKey()` tombstones; asserted on // the issue CODE and the prescription, never on a bare `toThrow()`. -describe('collaboration session durations carry their unit (#15679)', () => { +describe('collaboration session durations carry their unit in the key name', () => { it('REFUSES the retired `idleTimeout` with the rename in the message', () => { const result = CollaborationSessionConfigSchema.safeParse({ mode: 'ot', idleTimeout: 600000 }); expect(result.success).toBe(false); diff --git a/packages/spec/src/system/compliance-families-retirement.test.ts b/packages/spec/src/system/compliance-families-retirement.test.ts index c3019404d6d..f350b5038cd 100644 --- a/packages/spec/src/system/compliance-families-retirement.test.ts +++ b/packages/spec/src/system/compliance-families-retirement.test.ts @@ -148,7 +148,7 @@ const MUST_SURVIVE_SYSTEM = ['DataClassificationSchema', 'ComplianceFrameworkSch const SPEC_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../..'); const SRC_ROOT = path.join(SPEC_ROOT, 'src'); -describe('[#15513] system/ compliance families retirement — the public surface', () => { +describe('system/ compliance families retirement — the public surface', () => { it('every retired name has ZERO holders on any public entry; the survivors still stand', () => { for (const needed of ['.', './system', './kernel']) { expect(EXPORT_ENTRY_POINTS, `exports map must include ${needed}`).toContain(needed); @@ -156,7 +156,7 @@ describe('[#15513] system/ compliance families retirement — the public surface expect(exportNamesOf('./system').length, './system must export a non-trivial surface').toBeGreaterThan(100); for (const name of RETIRED_NAMES) { - expect(holdersOf(name), `${name} must have zero holders after #15513`).toEqual([]); + expect(holdersOf(name), `${name} must have zero holders after the families' retirement`).toEqual([]); } const systemNames = exportNamesOf('./system'); for (const name of MUST_SURVIVE_SYSTEM) { @@ -207,7 +207,7 @@ describe('[#15513] system/ compliance families retirement — the public surface } }; walk(SRC_ROOT); - expect(importers, 'a resurrected import means the retirement is being undone — re-read #15513').toEqual([]); + expect(importers, 'a resurrected import means the retirement is being undone — the three families were retired whole, none roadmapped').toEqual([]); }); it('the generated shards no longer list any of the nineteen defs or forty-five names', () => { @@ -238,7 +238,7 @@ describe('[#15513] system/ compliance families retirement — the public surface }); }); -describe('[#15513] ADR-0087 registration', () => { +describe('compliance families retirement — ADR-0087 registration', () => { it('declares all nineteen defs under major 18, with the three D3 semantic entries wired and no D2 conversion', () => { for (const def of RETIRED_DEFS) { expect(RETIRED_DEFS_BY_MAJOR[18], `${def} must be declared`).toContain(def); @@ -265,7 +265,7 @@ describe('[#15513] ADR-0087 registration', () => { expect(step!.rationale).toMatch(/retires those three compliance-shaped families WHOLE/); }); - it("keeps PR #15514's fourteen deadline-key registrations and three D3 entries as history", () => { + it("keeps the earlier deadline-key retirement's fourteen registrations and three D3 entries as history", () => { for (const key of HISTORY_KEYS) { expect(RETIRED_KEYS_BY_MAJOR[18], `${key} is history — keep it`).toContain(key); } @@ -312,7 +312,7 @@ describe('[#15513] ADR-0087 registration', () => { // the very declaration the self-test refuses.) // The residue this leg covers is everything `tsc` does not compile: JSON, // YAML, MD, MDX, and (under `packages/`) untyped `.js` / `.mjs` / `.cjs`. -describe('[#15513] tree-scoped absence: nothing inside the declared radius references a retired name', () => { +describe('tree-scoped absence: nothing inside the declared radius references a retired name', () => { const REPO_ROOT = path.resolve(SPEC_ROOT, '../..'); const THIS_FILE = path.relative(REPO_ROOT, fileURLToPath(import.meta.url)).split(path.sep).join('/'); @@ -491,6 +491,6 @@ describe('[#15513] tree-scoped absence: nothing inside the declared radius refer for (const root of WALK_ROOTS) walk(path.join(REPO_ROOT, root)); // Anti-vacuity: the walk really covered the tree. expect(visited).toBeGreaterThan(1000); - expect(offenders, 'a reference to a retired name means the retirement is being undone — re-read #15513').toEqual([]); + expect(offenders, 'a reference to a retired name means the retirement is being undone — the three families were retired whole, none roadmapped').toEqual([]); }); }); diff --git a/packages/spec/src/system/constants/system-names.test.ts b/packages/spec/src/system/constants/system-names.test.ts index 505d1dbd0d4..6fb3bacd855 100644 --- a/packages/spec/src/system/constants/system-names.test.ts +++ b/packages/spec/src/system/constants/system-names.test.ts @@ -103,7 +103,7 @@ describe('SystemFieldName', () => { // authorable, pinned in `../../data/object.test.ts`. The column reaching a row // and the tier being declarable are now BOTH true — a change from the split // state this comment used to record, not a restatement of it. - it('registers the ADR-0117 business-unit ownership stamp, distinct from the user attribute (#4611)', () => { + it('registers the ADR-0117 business-unit ownership stamp, distinct from the user attribute', () => { expect(SystemFieldName.OWNING_BUSINESS_UNIT_ID).toBe('owning_business_unit_id'); // Guard the naming discipline ADR-0117 D10 spells out: the record stamp must // NOT be confused with `sys_user.primary_business_unit_id`, which is a USER diff --git a/packages/spec/src/system/core-service-provider.test.ts b/packages/spec/src/system/core-service-provider.test.ts index 27dfc0bdbf6..de07c831ad9 100644 --- a/packages/spec/src/system/core-service-provider.test.ts +++ b/packages/spec/src/system/core-service-provider.test.ts @@ -31,7 +31,7 @@ describe('CORE_SERVICE_PROVIDER', () => { } }); - it('carries no entry for retired or never-real slots (#4451)', () => { + it('carries no entry for retired or never-real slots', () => { for (const slot of ['workflow', 'graphql']) { expect( Object.prototype.hasOwnProperty.call(CORE_SERVICE_PROVIDER, slot), diff --git a/packages/spec/src/system/data-migration-flag-column-move.pin.test.ts b/packages/spec/src/system/data-migration-flag-column-move.pin.test.ts index 71a68b8985f..d07b28edad0 100644 --- a/packages/spec/src/system/data-migration-flag-column-move.pin.test.ts +++ b/packages/spec/src/system/data-migration-flag-column-move.pin.test.ts @@ -69,7 +69,7 @@ function baseRow(over: Partial = {}): DataMigrationFlag { }; } -describe('columns_moved_at — absence is the contract (#16185, ruling on #15989 Q1)', () => { +describe('columns_moved_at — absence is the contract (ruled: one nullable datetime on the flag row)', () => { it('parses green when the member is absent — every row alive today', () => { const result = DataMigrationFlagSchema.safeParse(baseRow()); expect(result.success, JSON.stringify(result.error?.issues)).toBe(true); @@ -123,7 +123,7 @@ describe('columns_moved_at — absence is the contract (#16185, ruling on #15989 }); }); -describe('the ONE arbiter is unchanged by this card (#16185 constraint 2)', () => { +describe('the ONE arbiter is unchanged by the new member — read beside it, never inside it', () => { /** `(verified_at, blocking)` and the verdict recorded BEFORE the new member existed. */ const CASES: Array<{ label: string; over: Partial; verified: boolean }> = [ { label: 'verified, no blocking', over: { verified_at: MOVED_AT, blocking: 0 }, verified: true }, diff --git a/packages/spec/src/system/disaster-recovery.test.ts b/packages/spec/src/system/disaster-recovery.test.ts index 8250b7cbecc..11ea9042fe5 100644 --- a/packages/spec/src/system/disaster-recovery.test.ts +++ b/packages/spec/src/system/disaster-recovery.test.ts @@ -232,7 +232,7 @@ import { z } from 'zod'; // neighbouring `dns.ttl` is a DECLARED `externalVocabulary` mirror and must // survive this rename untouched, and no gate can catch its loss (the marker // exempts the key either way), so the pin is the only guard. -describe('FailoverConfig.healthCheckInterval carries its unit (#15679)', () => { +describe('FailoverConfig.healthCheckInterval carries its unit in the key name', () => { const regions = [ { name: 'us-east-1', role: 'primary' as const }, { name: 'eu-west-1', role: 'secondary' as const }, diff --git a/packages/spec/src/system/email-config.test.ts b/packages/spec/src/system/email-config.test.ts index a7d3842f08c..a168a8f7c81 100644 --- a/packages/spec/src/system/email-config.test.ts +++ b/packages/spec/src/system/email-config.test.ts @@ -53,7 +53,7 @@ describe('EmailProviderSchema', () => { expect(accepted).toEqual([...DELIVERABLE_PROVIDERS]); }); - it('accepts smtp — shipped by plugin-email since #5087 (ADR-0012)', () => { + it('accepts smtp — shipped by the SMTP transport in plugin-email (ADR-0012)', () => { // The single assertion #5104 is about: green after the enum gained // 'smtp', red on any revert of it. expect(EmailProviderSchema.safeParse('smtp').success).toBe(true); @@ -123,7 +123,7 @@ describe('EmailServiceConfigSchema', () => { // assertion below reads `parsed.data`, so each one is green after the // declaration and red on a revert of it. // ───────────────────────────────────────────────────────────────────────────── -describe('EmailServiceConfigSchema — keys the CLI reads (#5307)', () => { +describe('EmailServiceConfigSchema — keys the CLI reads', () => { it('carries queueDelivery through the parse, not into the bin', () => { for (const queueDelivery of [true, false]) { const parsed = EmailServiceConfigSchema.safeParse({ queueDelivery }); diff --git a/packages/spec/src/system/email-template-floor-locale-parity.pin.test.ts b/packages/spec/src/system/email-template-floor-locale-parity.pin.test.ts index 8b5a4c36cec..57b2102159f 100644 --- a/packages/spec/src/system/email-template-floor-locale-parity.pin.test.ts +++ b/packages/spec/src/system/email-template-floor-locale-parity.pin.test.ts @@ -57,7 +57,7 @@ const EMAIL_INDEX_SOURCE = join(REPO_ROOT, 'packages', 'plugins', 'plugin-email' /** `export const DEFAULT_TEMPLATE_LOCALE = '…';` — how plugin-email declares it. */ const DECLARATION = /^export const DEFAULT_TEMPLATE_LOCALE = '([^']*)';\s*$/m; -describe('#17614 — the published "must stay equal" claim, held', () => { +describe('EMAIL_TEMPLATE_FLOOR_LOCALE — the published "must stay equal" claim, held', () => { it("plugin-email's DEFAULT_TEMPLATE_LOCALE literal equals EMAIL_TEMPLATE_FLOOR_LOCALE", () => { const source = readFileSync(EMAIL_SERVICE_SOURCE, 'utf8'); const match = DECLARATION.exec(source); diff --git a/packages/spec/src/system/environment-artifact.test.ts b/packages/spec/src/system/environment-artifact.test.ts index dafd866cb7e..b1fbf4c742a 100644 --- a/packages/spec/src/system/environment-artifact.test.ts +++ b/packages/spec/src/system/environment-artifact.test.ts @@ -68,7 +68,7 @@ const RETIRED_V0_FAMILY = [ 'EnvironmentArtifactRequirement', 'EnvironmentArtifactRequirementSchema', ] as const; -describe('[#4740] `EnvironmentArtifact(Schema)` resolves to the ./system declaration everywhere', () => { +describe('`EnvironmentArtifact(Schema)` resolves to the ./system declaration everywhere', () => { it('resolves the export surface: one declaration in ./system, no other entry names it, the v0 family is gone', () => { // Anti-vacuity: the baseline must cover the real surface. (This used to // enumerate package.json's exports map and build its own `ts.createProgram` @@ -192,7 +192,7 @@ describe('EnvironmentArtifactSchema (wire shape)', () => { // ⚠ #4666 pin — the checksum object→string convergence is a TYPE change // invisible to the key-level authorable-surface gates (`checksum` exists in // both shapes). These parses are the gate for it. - describe('checksum is a 64-char hex STRING (#4666 pin)', () => { + describe('checksum is a 64-char hex STRING (pinned here: a type change the key-level gates cannot see)', () => { it('accepts a 64-char lowercase hex digest', () => { expect(Sha256DigestSchema.parse(WIRE_CHECKSUM)).toBe(WIRE_CHECKSUM); }); @@ -256,7 +256,7 @@ describe('EnvironmentArtifactSchema (wire shape)', () => { // The v0 keys are tombstoned, not silently stripped: authoring one raises // the prescription itself (retiredKey, #3855), and `tsc` types the key // `never` at the authoring site. - describe('retired v0 keys are tombstoned (#4740, ADR-0049)', () => { + describe('retired v0 keys are tombstoned (ADR-0049)', () => { it('rejects `functions` with the prescription', () => { expect(() => EnvironmentArtifactSchema.parse({ ...wireMinimal, functions: [] })) .toThrow(/`environmentArtifact\.functions` was removed in @objectstack\/spec 17\.0\.0.*Delete the key/s); @@ -272,7 +272,7 @@ describe('EnvironmentArtifactSchema (wire shape)', () => { .toThrow(/`environmentArtifact\.payloadRef` was removed in @objectstack\/spec 17\.0\.0.*Delete the key/s); }); - it('a full pre-#4740 v0 artifact is rejected loudly, not half-parsed', () => { + it('a full v0 artifact is rejected loudly, not half-parsed', () => { const v0 = { schemaVersion: '0.1', environmentId: 'proj_01HABCDE', @@ -308,7 +308,7 @@ describe('EnvironmentArtifactSchema (wire shape)', () => { // have gone passthrough to admit this key. Every pin here is a schema-reachable // parse, not a type-level assertion. -describe('grantedPermissions — install-time granted set per plugin manifest `id` (#14865)', () => { +describe('grantedPermissions — install-time granted set per plugin manifest `id`', () => { const granted = { '@acme/plugin-crm': { services: ['object', 'http'], diff --git a/packages/spec/src/system/http-server.test.ts b/packages/spec/src/system/http-server.test.ts index 7d031fcae77..73dbc43a253 100644 --- a/packages/spec/src/system/http-server.test.ts +++ b/packages/spec/src/system/http-server.test.ts @@ -23,7 +23,7 @@ import { ApiEndpointSchema } from '../api/endpoint.zod'; * what is pinned HERE is that the export is gone and that nothing else went * with it. */ -describe('HttpServerConfig retirement (#4938)', () => { +describe('HttpServerConfig retirement', () => { // `HttpServerConfigSchema` and `HttpServerConfig` were both runtime VALUES // (the latter via `Object.assign(HttpServerConfigSchema, { create })`), so a // runtime `in` check is a real witness for them — reverse-verified by pasting @@ -207,7 +207,7 @@ describe('MiddlewareConfigSchema', () => { * being removed. Replacing them wholesale with the pins below is the third * fixture disposition in the retirement playbook. */ -describe('server runtime vocabulary retirement (#5295)', () => { +describe('server runtime vocabulary retirement', () => { // All four were runtime VALUES (`z.enum` and `lazySchema` both produce one), // so an `in` check is a real witness. Reverse verification, direction // predicted before running it: pasting any limb back turns exactly these diff --git a/packages/spec/src/system/i18n-resolver.test.ts b/packages/spec/src/system/i18n-resolver.test.ts index 5c06f5a49f4..7844e25eb27 100644 --- a/packages/spec/src/system/i18n-resolver.test.ts +++ b/packages/spec/src/system/i18n-resolver.test.ts @@ -225,7 +225,7 @@ describe('resolveViewDescription', () => { * it spells identity, these expectations change with it instead of silently * describing a shape the runtime no longer produces. */ -describe('resolveViewLabel — served view-document shape (#4854)', () => { +describe('resolveViewLabel — served view-document shape', () => { const container = { listViews: { all_accounts: { @@ -1141,7 +1141,7 @@ describe('translateDashboard', () => { // (#7862); it now writes nothing into `options`. The bundle key is a // tombstone, so a well-typed bundle cannot carry it — the residue below is // cast, standing in for a stored row the conversion has not reached yet. - describe('widget options — the retired sub-caption overlay (#21257)', () => { + describe('widget options — the retired sub-caption overlay', () => { const residueBundle = { 'zh-CN': { dashboards: { @@ -1204,7 +1204,7 @@ describe('translateDashboard', () => { import { translatePage } from './i18n-resolver'; -describe('translateDashboard — global filters (#16772)', () => { +describe('translateDashboard — global filters, addressable from a bundle', () => { const bundle: TranslationBundle = { 'zh-CN': { dashboards: { @@ -1318,7 +1318,7 @@ describe('translateDashboard — global filters (#16772)', () => { }); }); -describe('translateDashboard — the catalog loses to an explicit override (#20680, ADR-0029 D9.2a)', () => { +describe('translateDashboard — the catalog loses to an explicit override (ADR-0029 D9.2a)', () => { // What the package shipped — the catalog's subject. const PACKAGED = { name: 'system_overview', @@ -1423,7 +1423,7 @@ describe('translateDashboard — the catalog loses to an explicit override (#206 expect(widget(out, 'widget_added').title).toBe('Added by the org'); }); - it('NO packaged base supplied → the pre-#20680 behaviour, catalog applies (the measured defect, as a control)', () => { + it('NO packaged base supplied → the behaviour before the override rule, catalog applies (the measured defect, as a control)', () => { const doc = clone(PACKAGED); doc.widgets[0].title = 'Total Users (edited)'; expect(widget(translateDashboard(doc, BUNDLE, { locale: 'en' }), 'widget_total_users').title).toBe('Total Users'); @@ -1570,7 +1570,7 @@ describe('translatePage', () => { // rendered a translated header above English cards and English KPI blocks, // because `pages` had four keys and none of them could reach a component. // ────────────────────────────────────────────────────────────────────────── - describe('per-component copy (#6080)', () => { + describe('per-component copy, keyed by component id', () => { const homeBundle: TranslationBundle = { 'zh-CN': { pages: { @@ -1634,7 +1634,7 @@ describe('translatePage', () => { expect(byId(out, 'lead_picker').properties.emptyText).toBe('暂无记录'); }); - it('no longer overlays `submitLabel` — the key retired from the copy face (#10926)', () => { + it('no longer overlays `submitLabel` — the key retired from the copy face', () => { // Flipped, not deleted: this used to assert the overlay ('创建'). The // schema now refuses `submitLabel` in a bundle, but the resolver is // deliberately schema-independent (it reads whatever object it is @@ -1814,7 +1814,7 @@ describe('translatePage', () => { // their labels stayed English while the header and card titles translated. // ──────────────────────────────────────────────────────────────────────────── -describe('translatePage — nested `properties.children` descent (#12961)', () => { +describe('translatePage — nested `properties.children` descent', () => { /** * Fixtures are typed through these open shapes instead of being left to * literal inference. `translatePage` returns `T`, so an @@ -1951,7 +1951,7 @@ describe('translatePage — nested `properties.children` descent (#12961)', () = }], }); - it('does not descend into `body` — the back-compat spelling is not authorable (#5775)', () => { + it('does not descend into `body` — the back-compat spelling is not authorable', () => { // The renderers read `schema.children || schema.body` for STORED // documents, but `body` is deliberately NOT a declared authoring key. // Descending into it would resurrect a second composition spelling. @@ -1963,7 +1963,7 @@ describe('translatePage — nested `properties.children` descent (#12961)', () = expect((card(out).properties.body as any[])[0].properties.label).toBe('Deals Won'); }); - it('descends into `items[].children` — the contract call the #12961 line left open, made by #16772', () => { + it('descends into `items[].children` — the contract call the `children`-descent ruling left open, made for tab and accordion panels', () => { // `page:tabs` / `page:accordion` nest their children one level deeper, // under `properties.items[].children`. The 2026-08-29 ruling (commit 901355c3b) named // `properties.children` and recorded this one as "its own contract @@ -1979,7 +1979,7 @@ describe('translatePage — nested `properties.children` descent (#12961)', () = expect((card(out).properties.items as any[])[0].label).toBe('Details'); }); - it('descends into `footer` — a declared, rendered slot, not a back-compat spelling (#20940)', () => { + it('descends into `footer` — a declared, rendered slot, not a back-compat spelling', () => { // `PageCardProps.footer` is declared "Card footer components (slot)" and // objectui's `PageCardRenderer` draws it under the body. It used to sit // beside `body` here as "the other back-compat spelling", so its copy @@ -2212,7 +2212,7 @@ import { } from './i18n-resolver'; import { ComponentPropsMap } from '../ui/component.zod'; -describe('walkAddressedPageComponents (#13218)', () => { +describe('walkAddressedPageComponents — the one addressed-component walk, shared by the resolver and the CLI extractor', () => { /** Enumeration-style consumption: what the walk reports, in visit order. */ const trace = (doc: any): AddressedPageComponentContext[] => { const rows: AddressedPageComponentContext[] = []; @@ -2223,7 +2223,7 @@ describe('walkAddressedPageComponents (#13218)', () => { return rows; }; - it('walks regions[].components[] AND slots. as roots — regions first, then slots in authored order (#16772)', () => { + it('walks regions[].components[] AND slots. as roots — regions first, then slots in authored order', () => { // A slot holds one component OR an array of them (`PageSchema.slots`); // both shapes are roots, at depth 0 and un-nested, exactly like a // region's entry. Before #16772 this walk visited `a` alone. @@ -2245,7 +2245,7 @@ describe('walkAddressedPageComponents (#13218)', () => { ]); }); - it('visits every root of a `kind: slotted` page that authors `regions: []` — the measured zero (#16772)', () => { + it('visits every root of a `kind: slotted` page that authors `regions: []` — the measured zero', () => { // The shape the card measured: `regions: []`, everything under `slots`. // `walkAddressedPageComponents(page, …)` visited NOTHING on it, so // `pages.` carried exactly two addressable keys however many @@ -2275,7 +2275,7 @@ describe('walkAddressedPageComponents (#13218)', () => { ]); }); - it('descends properties.children, properties.footer AND properties.items[].children — body stays unvisited (#16772, #20940)', () => { + it('descends properties.children, properties.footer AND properties.items[].children — body stays unvisited', () => { const doc: any = { regions: [{ name: 'main', @@ -2303,7 +2303,7 @@ describe('walkAddressedPageComponents (#13218)', () => { ]); }); - it('hands a malformed node in a `page:card` footer to the visitor, so a consumer that judges what the walk visits judges it (#20940)', () => { + it('hands a malformed node in a `page:card` footer to the visitor, so a consumer that judges what the walk visits judges it', () => { // The consumer shape objectui's validator has: judge each visited node's // props against its `ComponentPropsMap` row. Before #20940 the footer was // not descended, so the typo'd card below came back judged by nobody — @@ -2500,7 +2500,7 @@ describe('walkAddressedPageComponents (#13218)', () => { // #16772 — a `kind: 'slotted'` page goes from unaddressable to addressable // ──────────────────────────────────────────────────────────────────────────── -describe('translatePage — slotted page roots and tab panels (#16772)', () => { +describe('translatePage — slotted page roots and tab panels', () => { /** * The measured shape, rebuilt as a minimal fixture rather than restated * from the card: a `kind: 'slotted'` record page authoring `regions: []`, @@ -2649,7 +2649,7 @@ describe('translatePage — slotted page roots and tab panels (#16772)', () => { import { resolveTabLabel } from './i18n-resolver'; -describe('resolveTabLabel (#5377)', () => { +describe('resolveTabLabel — filter-preset tab labels, keyed under `_tabs`', () => { const bundle: TranslationBundle = { 'zh-CN': { objects: { @@ -2722,7 +2722,7 @@ describe('resolveTabLabel (#5377)', () => { }); }); -describe('translatePage — filter-preset tab bar (#5377)', () => { +describe('translatePage — filter-preset tab bar', () => { const bundle: TranslationBundle = { 'zh-CN': { objects: { @@ -2781,7 +2781,7 @@ describe('translatePage — filter-preset tab bar (#5377)', () => { expect(tabs(out)[0].label).toBe('进行中'); }); - it('leaves an inline-locale-map label alone rather than flattening it (#5728)', () => { + it('leaves an inline-locale-map label alone rather than flattening it', () => { // Since the union widening a tab label may itself be multilingual. That is // the author's own resolution route (`pickLocalized` picks at render time); // overwriting it with a bundle miss would turn four languages into one. @@ -2804,7 +2804,7 @@ describe('translatePage — filter-preset tab bar (#5377)', () => { }); }); -describe('ObjectTranslationDataSchema._tabs (#5377)', () => { +describe('ObjectTranslationDataSchema._tabs', () => { it('accepts a `_tabs` entry — the key a strict schema used to reject', () => { const data = TranslationDataSchema.parse({ objects: { showcase_task: { _tabs: { urgent: { label: '紧急' } } } }, @@ -2937,7 +2937,7 @@ describe('translateObject system-field label fallback', () => { import { injectedSystemColumnDefs } from '../data/injected-system-column-provenance'; -describe('translateObject localises every platform-injected column (objectstack#14972)', () => { +describe('translateObject localises every platform-injected column', () => { // The column definitions come from the provenance module itself — the same // objects `applySystemFields` spreads at registration and the `/meta` read // exits serve — so the English defaults this block starts from cannot drift @@ -3046,7 +3046,7 @@ describe('translateObject localises every platform-injected column (objectstack# }); }); -describe('translateObject inline actions (objectstack#3370)', () => { +describe('translateObject inline actions — served with their `_actions` translations', () => { // The `sys_approval_request` shape: decision actions declared inline on the // object. The plugin ships `_actions` translations for them, but the object // document used to go out with the English literals regardless of locale — @@ -3128,7 +3128,7 @@ describe('translateObject inline actions (objectstack#3370)', () => { // resolveObjectFieldLabels — the `/i18n/labels/:object/:locale` body // ========================================== -describe('resolveObjectFieldLabels (objectstack#3833, #3847)', () => { +describe('resolveObjectFieldLabels — the declared rich entries, read from the nested translation shape', () => { const data = TranslationDataSchema.parse({ objects: { contact: { @@ -3155,7 +3155,7 @@ describe('resolveObjectFieldLabels (objectstack#3833, #3847)', () => { }); }); - it('carries the help and options the bundle holds (#3847)', () => { + it('carries the help and options the bundle holds', () => { // These are the translations the endpoint used to discard by emitting a // bare string per field. objectui needs exactly them, and had to read the // full-bundle route to get them. @@ -3206,7 +3206,7 @@ describe('resolveObjectFieldLabels (objectstack#3833, #3847)', () => { * mismatch no test compared, because none of them ever put the emitted * value and the declared contract in the same assertion. */ - it('produces a body that satisfies GetFieldLabelsResponseSchema (#3847)', () => { + it('produces a body that satisfies GetFieldLabelsResponseSchema', () => { const response = { object: 'contact', locale: 'en-US', @@ -3265,7 +3265,7 @@ describe('toLocaleDescriptors', () => { expect(toLocaleDescriptors([], 'en')).toEqual([]); }); - it('sets `label` to the code, and the declaration promises exactly that (#7634)', () => { + it('sets `label` to the code, and the declaration promises exactly that', () => { // The SUBSTANCE pin: producer output vs the DECLARED shape, both halves. // // `GetLocalesResponseSchema` described `label` as "Display name of the @@ -3285,7 +3285,7 @@ describe('toLocaleDescriptors', () => { expect( descriptor.label, `toLocaleDescriptors must set label to the code (${descriptor.code}) — producing a real ` - + 'display name is a product decision nothing pulls for, and the describe promises the code (#7634)', + + 'display name is a product decision nothing pulls for, and the describe promises the code', ).toBe(descriptor.code); } @@ -3296,16 +3296,16 @@ describe('toLocaleDescriptors', () => { expect(description.length, 'the `label` field must carry a describe at all').toBeGreaterThan(0); expect( description, - 'the `label` describe must not promise a display name while every producer sets the code (#7634)', + 'the `label` describe must not promise a display name while every producer sets the code', ).not.toMatch(/display name/i); expect( description, - 'the `label` describe must state the code-equality convention it actually ships (#7634)', + 'the `label` describe must state the code-equality convention it actually ships', ).toMatch(/equals `code`/i); }); }); -describe('normalizeSupportedLocales (#7679)', () => { +describe('normalizeSupportedLocales — the declared supportedLocales narrow the advertised set', () => { // The narrowing rule both providers of the `i18n` slot share. Held here, // next to `toLocaleDescriptors`, because both of them can be the thing // mounting `GET /i18n/locales` and a second copy is how that route came to @@ -3383,7 +3383,7 @@ describe('normalizeSupportedLocales (#7679)', () => { * end-to-end shape is pinned in * `packages/qa/dogfood/test/showcase-object-extension-scalar-divergence.dogfood.test.ts`. */ -describe('translateObject — catalog vs explicit override (#8284)', () => { +describe('translateObject — catalog vs explicit override', () => { /** The packaged declaration, as the owner contributor holds it. */ const PACKAGED = { name: 'showcase_account', @@ -3472,7 +3472,7 @@ describe('translateObject — catalog vs explicit override (#8284)', () => { expect(out.label).toBe('Customer'); }); - it('NO packaged base supplied → pre-#8284 behaviour, catalog applies', () => { + it('NO packaged base supplied → the behaviour before the override rule, catalog applies', () => { // "Unknown" is not "authored". A host whose protocol cannot answer (or a // runtime-authored object with no code owner) keeps every translation it // has today rather than losing them to an inference nobody can support. @@ -3729,7 +3729,7 @@ import { } from './i18n-resolver'; import { type TranslationBundle as FlowTestBundle } from './translation.zod'; -describe('translateFlow (#11287)', () => { +describe('translateFlow — screen-flow copy from the `flows` bundle group', () => { // Mirrors #11287's measurement: HotCRM's real `lead_conversion` flow with // the real zh-CN bundle carrying the `flows` section. The probe // `i18n.t('flows.lead_conversion.screens.screen_1.title','zh-CN') = 转化详情` @@ -3930,7 +3930,7 @@ describe('translateFlow (#11287)', () => { }); }); -describe('translateFlow — screens inside ADR-0031 regions (#11745)', () => { +describe('translateFlow — screens inside ADR-0031 regions', () => { // The fourth pass in this repo written against a flat `flow.nodes` walk // (#4347 `applyConversionsToFlow`, #4380 the flow lint rules, #5383 // `flow-inert-node-condition` were the first three). `FlowNode.config` @@ -4131,7 +4131,7 @@ describe('translateFlow — screens inside ADR-0031 regions (#11745)', () => { }); }); -describe('resolveFlowScreenTitle (#11287)', () => { +describe('resolveFlowScreenTitle — a screen title from the `flows` bundle group', () => { const bundle: FlowTestBundle = { 'zh-CN': { flows: { lead_conversion: { screens: { screen_1: { title: '转化详情' } } } }, @@ -4176,7 +4176,7 @@ describe('resolveFlowScreenTitle (#11287)', () => { * or the pin describes a shape the runtime never produces — the #4854 lesson, * one level in. */ -describe('translateView — bulkActionDefs (#14253)', () => { +describe('translateView — bulkActionDefs', () => { const container = { listViews: { open_duties: { @@ -4318,7 +4318,7 @@ describe('translateView — bulkActionDefs (#14253)', () => { import { translateView } from './i18n-resolver'; -describe('translateView — the catalog loses to an explicit override (#20731, ADR-0029 D9.2a)', () => { +describe('translateView — the catalog loses to an explicit override (ADR-0029 D9.2a)', () => { // The view container as the package ships it. The served documents below are // what `expandViewContainer` emits from it — the same composer the boot // registers each packaged view with — so the base and the served view share @@ -4486,7 +4486,7 @@ describe('translateView — the catalog loses to an explicit override (#20731, A expect(param(out, 'mark_done', 'note').label).toBe('备注'); }); - it('NO packaged base supplied → the pre-#20731 behaviour, catalog applies (the measured defect, as a control)', () => { + it('NO packaged base supplied → the behaviour before the override rule, catalog applies (the measured defect, as a control)', () => { const doc = clone(PACKAGED); doc.label = 'In Progress (edited)'; expect(translateView(doc, BUNDLE, { locale: 'zh-CN' }).label).toBe('进行中'); @@ -4542,7 +4542,7 @@ describe('translateView — the catalog loses to an explicit override (#20731, A }); }); -describe('ObjectTranslationDataSchema — _views..bulkActions (#14253)', () => { +describe('ObjectTranslationDataSchema — _views..bulkActions', () => { it('accepts the measured key face', () => { const data = ObjectTranslationDataSchema.parse({ _views: { @@ -4609,7 +4609,7 @@ describe('ObjectTranslationDataSchema — _views..bulkActions (#14253)', ( * the two ends from drifting: `objectFieldLabelKey` / `objectLabelKey` exist * for the same reason. */ -describe('objectValidationMessageKey (#14253)', () => { +describe('objectValidationMessageKey', () => { it('spells the address the `_validations` group declares', () => { expect(objectValidationMessageKey('duly_duty', 'standing_no_frequency')) .toBe('objects.duly_duty._validations.standing_no_frequency.message'); @@ -4634,7 +4634,7 @@ describe('objectValidationMessageKey (#14253)', () => { }); }); -describe('ObjectTranslationDataSchema — _validations (#14253)', () => { +describe('ObjectTranslationDataSchema — _validations', () => { it('accepts a rule message keyed by rule name', () => { const data = ObjectTranslationDataSchema.parse({ _validations: { standing_no_frequency: { message: '常规任务必须设置频率。' } }, @@ -4690,7 +4690,7 @@ describe('ObjectTranslationDataSchema — _validations (#14253)', () => { * addresses members by a name the authoring schema does not carry is * unresolvable, which is the trap the whole file is built to keep out. */ -describe('translateDataset (#14253)', () => { +describe('translateDataset', () => { const dataset = () => DatasetSchema.parse({ name: 'duty_pulse', label: 'Duty pulse', @@ -4723,7 +4723,7 @@ describe('translateDataset (#14253)', () => { }, }; - it('is registered in the dispatch table, so the REST boundary follows (#3786)', () => { + it('is registered in the dispatch table, so the REST boundary follows — one derived list, no hand-kept copy', () => { // `TRANSLATABLE_METADATA_TYPES` is DERIVED from `METADATA_DOCUMENT_TRANSLATORS` // and `@objectstack/rest` reads the derived set — this is the assertion that // the wiring is one edit, not two. @@ -4752,7 +4752,7 @@ describe('translateDataset (#14253)', () => { expect(out.dimensions.find((d: any) => d.name === 'status').label).toBe('Status'); }); - it('leaves an inline locale map intact when the bundle does not cover it (#5728)', () => { + it('leaves an inline locale map intact when the bundle does not cover it', () => { // `label` is `I18nLabelSchema`, so the author may already have written a // map. Resolving over it would flatten four languages down to one. const inline = DatasetSchema.parse({ @@ -4796,7 +4796,7 @@ describe('translateDataset (#14253)', () => { }); }); -describe('TranslationDataSchema — datasets (#14253)', () => { +describe('TranslationDataSchema — datasets', () => { it('accepts the measured key face', () => { const data = TranslationDataSchema.parse({ datasets: { @@ -4850,7 +4850,7 @@ describe('TranslationDataSchema — datasets (#14253)', () => { // #14882 — the fallback chain is the DECLARED one, not a literal `en` // --------------------------------------------------------------------------- -describe('#14882 — a declared fallback chain, at the resolver', () => { +describe('a declared fallback chain, not a literal `en`, at the resolver', () => { /** * The card's workspace, at the resolver: labels authored in the default * locale (`zh-CN`), a courtesy `en` bundle for English users, NO `zh-CN` @@ -4941,7 +4941,7 @@ describe('#14882 — a declared fallback chain, at the resolver', () => { // #15711 — ruled A: the authored label IS the default-locale text // ------------------------------------------------------------------------- - it('[#15711] a chain that DECLARES en does not outrank the authored label for a default-locale request', () => { + it('a chain that DECLARES en does not outrank the authored label for a default-locale request (ruled: the authored label is the default-locale text)', () => { // A stack declaring `defaultLocale: 'zh-CN'` with a reflexive // `fallbackLocale: 'en'` and no zh-CN bundle — the trap #14882 pinned as // it answered then (`Entry Sheet`, the declared `en` outranking the @@ -4957,7 +4957,7 @@ describe('#14882 — a declared fallback chain, at the resolver', () => { .toBe('Entry Sheet'); }); - it('[#15711] a NON-default request still walks the declared chain: fr → en bundle → authored', () => { + it('a NON-default request still walks the declared chain: fr → en bundle → authored', () => { // `fallbackLocale` keeps its full meaning for every non-default request. const fr = { locale: 'fr', fallbackChain: ['en'], defaultLocale: 'zh-CN' }; expect(labelsOf(translateMetadataDocument('object', SHEET, EN_ONLY, fr))).toEqual(ENGLISH); @@ -4967,7 +4967,7 @@ describe('#14882 — a declared fallback chain, at the resolver', () => { expect(labelsOf(translateMetadataDocument('object', SHEET, EN_ONLY, en))).toEqual(ENGLISH); }); - it('[#15711] a default-locale bundle, when shipped, still wins over the authored label', () => { + it('a default-locale bundle, when shipped, still wins over the authored label', () => { // Only the CHAIN is skipped: the requested locale's own bundle is // consulted first, so the reporter's `os i18n extract --locales=zh-CN` // layout keeps working — optional now, not dead. @@ -4982,12 +4982,12 @@ describe('#14882 — a declared fallback chain, at the resolver', () => { expect(out.fields.name.label).toBe('填报单名称'); }); - it('[#15711] the default-locale match is a BCP-47 comparison: zh-cn names zh-CN', () => { + it('the default-locale match is a BCP-47 comparison: zh-cn names zh-CN', () => { const lower = { locale: 'zh-cn', fallbackChain: ['en'], defaultLocale: 'zh-CN' }; expect(translateMetadataDocument('object', SHEET, EN_ONLY, lower).label).toBe('填报单'); }); - it("[#15711] a caller that declares NO chain gets 'requested locale, then the authored label' — no literal en", () => { + it("a caller that declares NO chain gets 'requested locale, then the authored label' — no literal en", () => { // The ruling's second facet: `fallbackChain ?? ['en']` became // `fallbackChain ?? []`. A chain-less caller (a host outside this repo; // the core in-memory i18n fallback, #15694) no longer has `en` consulted @@ -5008,7 +5008,7 @@ describe('#14882 — a declared fallback chain, at the resolver', () => { }); }); -describe('resolveMetadataFormSchemaTitles (#16458)', () => { +describe('resolveMetadataFormSchemaTitles — bundle labels overlaid as JSON Schema titles, repeater rows included', () => { const bundle: TranslationBundle = { 'zh-CN': { metadataForms: { diff --git a/packages/spec/src/system/job.test.ts b/packages/spec/src/system/job.test.ts index c0142670dcc..73414559c35 100644 --- a/packages/spec/src/system/job.test.ts +++ b/packages/spec/src/system/job.test.ts @@ -89,7 +89,7 @@ describe('CronScheduleSchema', () => { * default, which ECMA-402 requires every runtime to carry, so the narrowing can * never refuse an omitted key — and `'UTC+8'`, an offset that names no zone. */ -describe('CronScheduleSchema.timezone — iana_time_zone membership (#16292)', () => { +describe('CronScheduleSchema.timezone — iana_time_zone membership', () => { const parseTz = (timezone: string) => CronScheduleSchema.safeParse({ type: 'cron', expression: '0 0 * * *', timezone }); @@ -468,7 +468,7 @@ describe('JobSchema', () => { // rejection must carry the RENAME (the prescription is the payload), not a // bare unrecognized-key error, and the value must survive the rename at the // same magnitude. - describe('job.timeout → job.timeoutMs (#14478, ADR-0087 `job-timeout-to-timeout-ms`)', () => { + describe('job.timeout → job.timeoutMs (ADR-0087 `job-timeout-to-timeout-ms`)', () => { const base = { name: 'long_running_job', schedule: { type: 'cron' as const, expression: '0 0 * * *' }, @@ -833,7 +833,7 @@ describe('Job Scheduling Integration', () => { }); // ── `job.id` retired in 17.0.0 (#4667, ADR-0049) ──────────────────────────── -describe('retired job.id (#4667)', () => { +describe('retired job.id', () => { const base = { name: 'nightly_sync', schedule: { type: 'cron' as const, expression: '0 0 * * *' }, @@ -878,7 +878,7 @@ describe('retired job.id (#4667)', () => { * package-wide `@example` question is its own card — ⛔ do not grow this into a * family sweep here. */ -describe("JobSchema's own @example (#19184)", () => { +describe("JobSchema's own @example — copied verbatim, it parses", () => { const HERE = dirname(fileURLToPath(import.meta.url)); const SOURCE = readFileSync(resolve(HERE, './job.zod.ts'), 'utf8'); const ANCHOR = '@example Metadata Sync Job (Cron)'; diff --git a/packages/spec/src/system/logging.test.ts b/packages/spec/src/system/logging.test.ts index 3a54c8fe27d..ef5b81d15a4 100644 --- a/packages/spec/src/system/logging.test.ts +++ b/packages/spec/src/system/logging.test.ts @@ -511,7 +511,7 @@ describe('LoggingConfigSchema', () => { // `flushInterval` was declared TWICE on this file, in two different defs with // two different defaults, so each def is pinned separately below: they are // different keys and each carries its own prescription. -describe('logging duration keys → *Ms (#17782, #15939, #14478)', () => { +describe('logging duration keys → *Ms', () => { describe('HttpDestinationConfig.batch.flushInterval → flushIntervalMs', () => { it('REFUSES the retired spelling with a rename naming `flushIntervalMs`', () => { const result = HttpDestinationConfigSchema.safeParse({ diff --git a/packages/spec/src/system/message-queue-retirement.test.ts b/packages/spec/src/system/message-queue-retirement.test.ts index b7e1baa0220..f7503ba624b 100644 --- a/packages/spec/src/system/message-queue-retirement.test.ts +++ b/packages/spec/src/system/message-queue-retirement.test.ts @@ -46,7 +46,7 @@ import { // Form follows #4988 / #5055: resolved symbol identity over every public entry // via the build-time `export-origins/` artifact, plus the file-deletion probe // in the #4988 direction (whole-file retirement, no surviving occupant). -describe('[#8075] system/ message-queue config family retirement', () => { +describe('system/ message-queue config family retirement', () => { /** The 14 names the five retired defs exported (5 schema consts + 9 types). */ const RETIRED_NAMES = [ 'MessageQueueProviderSchema', 'MessageQueueProvider', @@ -84,7 +84,7 @@ describe('[#8075] system/ message-queue config family retirement', () => { // ── ABSENCE (every entry — exact names, so the near-namesakes cannot // satisfy these by substring) ──────────────────────────────────────── for (const name of RETIRED_NAMES) { - expect(holdersOf(name), `${name} must have zero holders after #8075`).toEqual([]); + expect(holdersOf(name), `${name} must have zero holders after the family's retirement`).toEqual([]); } // ── SURVIVAL ────────────────────────────────────────────────────────── @@ -124,7 +124,7 @@ describe('[#8075] system/ message-queue config family retirement', () => { } }; walk(srcRoot); - expect(importers, 'a resurrected import means the retirement is being undone — re-read #8075').toEqual([]); + expect(importers, 'a resurrected import means the retirement is being undone — the family had no consumer and carried an inline credential').toEqual([]); }); it('runtime namespace agrees with the compiler view', async () => { diff --git a/packages/spec/src/system/metadata-form-declared-rows.pin.test.ts b/packages/spec/src/system/metadata-form-declared-rows.pin.test.ts index 05e57111a76..e806b0555e5 100644 --- a/packages/spec/src/system/metadata-form-declared-rows.pin.test.ts +++ b/packages/spec/src/system/metadata-form-declared-rows.pin.test.ts @@ -95,7 +95,7 @@ function topLevelRows(form: unknown): FormEntry[] { const rowsFor = (type: string) => topLevelRows(METADATA_FORM_REGISTRY[type]); const rowFor = (type: string, key: string) => rowsFor(type).filter((r) => r.field === key); -describe('declared keys that now have a form row (#19085)', () => { +describe('declared keys that now have a form row', () => { // The probe is only a reading if it can also report a zero. Both controls // run against the SAME helper the assertions use, so a helper that stopped // finding rows would fail here rather than passing everything vacuously. @@ -233,7 +233,7 @@ describe('object.imageField is offered as a plain text row beside nameField, wit * fix) cannot otherwise tell this row apart from a real script row * (`body.source`, `action.source`, both genuinely `'javascript'`). */ -describe('hook.condition declares the CEL predicate language it edits (#20439)', () => { +describe('hook.condition declares the CEL predicate language it edits', () => { it('hook.condition is a `code` row declaring language: expression, not javascript', () => { const [row, ...extra] = rowFor('hook', 'condition'); expect(row, '`condition` is declared by HookSchema; the hook form must offer it').toBeDefined();