From 89c4b300c22d6444e08b3c7388e7dcf110a02c32 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 5 Oct 2026 03:04:21 +0000 Subject: [PATCH] test(spec): the first data/ file group's test titles state each cited 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 --- ...aggregate-field-type-compatibility.test.ts | 8 ++-- ...ytics-date-range-closed-vocabulary.test.ts | 2 +- ...lytics-date-range-two-bound-window.test.ts | 6 +-- .../analytics-query-window-integer.test.ts | 4 +- .../data/analytics-strictness-batchd.test.ts | 18 ++++----- packages/spec/src/data/analytics.test.ts | 12 +++--- packages/spec/src/data/api-derivation.test.ts | 12 +++--- .../api-methods-batch-conformance.test.ts | 8 ++-- .../spec/src/data/authoring-key-lint.test.ts | 4 +- .../spec/src/data/autonumber-format.test.ts | 6 +-- .../autonumber-unanchored-boundary.test.ts | 6 +-- .../data/bulk-write-hook-conformance.test.ts | 4 +- packages/spec/src/data/calendar-day.test.ts | 4 +- packages/spec/src/data/context-tokens.test.ts | 2 +- .../currency-mode-family-closure.pin.test.ts | 4 +- .../data/currency-precision-iso4217.test.ts | 14 +++---- packages/spec/src/data/data-engine.test.ts | 40 +++++++++---------- .../datasource-credential-redaction.test.ts | 12 +++--- packages/spec/src/data/datasource.test.ts | 20 +++++----- .../spec/src/data/date-range-presets.test.ts | 4 +- 20 files changed, 95 insertions(+), 95 deletions(-) diff --git a/packages/spec/src/data/aggregate-field-type-compatibility.test.ts b/packages/spec/src/data/aggregate-field-type-compatibility.test.ts index 9b10ed71519..966f6375fa9 100644 --- a/packages/spec/src/data/aggregate-field-type-compatibility.test.ts +++ b/packages/spec/src/data/aggregate-field-type-compatibility.test.ts @@ -78,12 +78,12 @@ describe('AGGREGATE_FIELD_TYPE_COMPATIBILITY — the ruled rows, resolved agains expect(sorted(AGGREGATE_FIELD_TYPE_COMPATIBILITY.count)).toEqual(sorted(FieldType.options)); }); - it('[#20808] `count_distinct`: every FieldType EXCEPT the JSON-stored ones', () => { + it('`count_distinct`: every FieldType EXCEPT the JSON-stored ones', () => { expect(sorted(AGGREGATE_FIELD_TYPE_COMPATIBILITY.count_distinct)) .toEqual(sorted(FieldType.options.filter((t) => !JSON_STORED.includes(t)))); }); - it('[#20808] the JSON-stored bucket IS the field-value structured-JSON class plus the multi-option types', () => { + it('the JSON-stored bucket IS the field-value structured-JSON class plus the multi-option types', () => { // A type joining either class elsewhere is stored in a JSON column by every // SQL driver, and no two backends compare such values alike — so it reds // here until the count_distinct row records a decision. @@ -147,7 +147,7 @@ describe('isAggregateCompatibleWithFieldType — the pairs the card is about', ( } }); - it('accepts `sum` / `avg` / `min` / `max` over booleans — #11152 (numbers on every backend), upheld by decision batch #80', () => { + it('accepts `sum` / `avg` / `min` / `max` over booleans — numbers on every backend, a ruling that outranks the refused-by-default rule', () => { for (const fn of ['sum', 'avg', 'min', 'max'] as const) { expect(isAggregateCompatibleWithFieldType(fn, 'boolean')).toBe(true); expect(isAggregateCompatibleWithFieldType(fn, 'toggle')).toBe(true); @@ -181,7 +181,7 @@ describe('isAggregateCompatibleWithFieldType — the pairs the card is about', ( } }); - it('[#20808] accepts `count_distinct` over every scalar-stored type — `formula`, `percent`, `select`, `lookup`, `file` included — and refuses the JSON-stored ones', () => { + it('accepts `count_distinct` over every scalar-stored type — `formula`, `percent`, `select`, `lookup`, `file` included — and refuses the JSON-stored ones', () => { for (const t of FieldType.options) { expect(isAggregateCompatibleWithFieldType('count_distinct', t), t).toBe(!JSON_STORED.includes(t)); } diff --git a/packages/spec/src/data/analytics-date-range-closed-vocabulary.test.ts b/packages/spec/src/data/analytics-date-range-closed-vocabulary.test.ts index 233c53eb8f8..ee380cc7ede 100644 --- a/packages/spec/src/data/analytics-date-range-closed-vocabulary.test.ts +++ b/packages/spec/src/data/analytics-date-range-closed-vocabulary.test.ts @@ -57,7 +57,7 @@ const RETIRED_SPELLINGS = [ '', ]; -describe('AnalyticsQuerySchema.timeDimensions[].dateRange — closed vocabulary (#16041)', () => { +describe('AnalyticsQuerySchema.timeDimensions[].dateRange — closed vocabulary', () => { it('derives the string arm from date-range-presets.ts — no fourth copy of the list', () => { // The module header records the vocabulary once existed in three drifting // copies. The enum's options ARE the module's tuple, in its order. diff --git a/packages/spec/src/data/analytics-date-range-two-bound-window.test.ts b/packages/spec/src/data/analytics-date-range-two-bound-window.test.ts index a74648a5376..3bb9e4beb21 100644 --- a/packages/spec/src/data/analytics-date-range-two-bound-window.test.ts +++ b/packages/spec/src/data/analytics-date-range-two-bound-window.test.ts @@ -60,7 +60,7 @@ const REFUSED_ARITIES: ReadonlyArray = [ ['{7_days_ago}'], // one macro token is a bound, not a window ]; -describe('AnalyticsDateRangeSchema — the array arm is exactly two string bounds (#17598 ①)', () => { +describe('AnalyticsDateRangeSchema — the array arm is exactly two string bounds', () => { it('accepts the two-bound windows the contract has always prescribed', () => { // The control. Without it a narrowing that refused EVERY array would pass // every refusal assertion below. @@ -127,7 +127,7 @@ describe('AnalyticsDateRangeSchema — the array arm is exactly two string bound }); }); -describe('analyticsDateRangeRefusalMessage — each ORIGIN gets a true sentence (#17598 ②)', () => { +describe('analyticsDateRangeRefusalMessage — each ORIGIN gets a true sentence', () => { it('states the schema origin only when the schema is where it was refused', () => { for (const input of [...REFUSED_ARITIES, 'Last 7 days', 42, null]) { const atSchema = analyticsDateRangeRefusalMessage(input, 'schema'); @@ -170,7 +170,7 @@ describe('analyticsDateRangeRefusalMessage — each ORIGIN gets a true sentence expect(analyticsDateRangeRefusalMessage({ start: '2026-01-01' }, 'schema')).toContain('received object'); }); - it('⭐ names the EMPTY bound the arm cannot refuse, at the bound that is empty (#18278)', () => { + it('⭐ names the EMPTY bound the arm cannot refuse, at the bound that is empty', () => { // The premise, asserted rather than assumed: the tuple arm judges arity and // bound TYPE, never a bound's VALUE, so this window is ACCEPTED at the // schema door and refused PAST it — the residue diff --git a/packages/spec/src/data/analytics-query-window-integer.test.ts b/packages/spec/src/data/analytics-query-window-integer.test.ts index 7d4927154b9..2a5c6409d4c 100644 --- a/packages/spec/src/data/analytics-query-window-integer.test.ts +++ b/packages/spec/src/data/analytics-query-window-integer.test.ts @@ -67,7 +67,7 @@ const ACCEPTED: ReadonlyArray<[string, Record]> = [ ]; for (const [name, schema, base] of DOORS) { - describe(`[#21365] ${name} — the window is a non-negative integer`, () => { + describe(`${name} — the window is a non-negative integer`, () => { for (const [label, window, key, code] of REFUSED) { it(`refuses ${label} at \`${key}\``, () => { const r = schema.safeParse({ ...base, ...window }); @@ -88,7 +88,7 @@ for (const [name, schema, base] of DOORS) { }); } -describe('[#21365] the dataset selection holds the query\'s own declarations, not a copy', () => { +describe('the dataset selection holds the query\'s own declarations, not a copy', () => { it('`limit` and `offset` on DatasetSelectionSchema are the AnalyticsQuerySchema instances', () => { expect(DatasetSelectionSchema.shape.limit).toBe(AnalyticsQuerySchema.shape.limit); expect(DatasetSelectionSchema.shape.offset).toBe(AnalyticsQuerySchema.shape.offset); diff --git a/packages/spec/src/data/analytics-strictness-batchd.test.ts b/packages/spec/src/data/analytics-strictness-batchd.test.ts index 0e29ce2274a..a2ca0a70835 100644 --- a/packages/spec/src/data/analytics-strictness-batchd.test.ts +++ b/packages/spec/src/data/analytics-strictness-batchd.test.ts @@ -80,7 +80,7 @@ const QUERY = { cube: 'batchd_probe', measures: ['count'] } as const; // =========================================================================== // 1. The doors — a parse must exist, or none of the rest means anything // =========================================================================== -describe('#4001 batch D — the doors the cube family is reachable through', () => { +describe('batch D, unknown keys refused — the doors the cube family is reachable through', () => { it('`defineCube()` is a real parse door — it throws on a malformed config', () => { expect(() => defineCube({ ...CUBE, notACubeKey: 1 } as never)).toThrow(/notACubeKey/); }); @@ -90,7 +90,7 @@ describe('#4001 batch D — the doors the cube family is reachable through', () expect(reject(ObjectStackDefinitionSchema, stack)).toContain('publik'); }); - it('[#10194] `analytics_cube` now resolves the SAME schema at the saveMetaItem door', () => { + it('`analytics_cube` now resolves the SAME schema at the saveMetaItem door', () => { // This pin used to assert the opposite — `getMetadataTypeSchema` answering // `undefined` — and its comment demanded that the ADR-0010 envelope // question be re-asked before the line was "fixed". It was: commit 2306a765c bound @@ -128,7 +128,7 @@ describe('#4001 batch D — the doors the cube family is reachable through', () // =========================================================================== // 2. Every closed site, at its own path, through its real carrier // =========================================================================== -describe('#4001 batch D — closed sites reject unknown keys where they live', () => { +describe('batch D — closed sites reject unknown keys where they live', () => { it('`Cube` — the top-level cube shape', () => { expect(reject(CubeSchema, { ...CUBE, publik: true })).toContain('publik'); }); @@ -245,7 +245,7 @@ describe('#4001 batch D — closed sites reject unknown keys where they live', ( // =========================================================================== // 3. The curation — each alias anchored to the declaration that makes it true // =========================================================================== -describe('#4001 batch D — alias claims are true of the surfaces they point at', () => { +describe('batch D, unknown keys refused — alias claims are true of the surfaces they point at', () => { it('`title` → `label` on Metric/Dimension, and `label` → `title` on Cube: each spelling is CORRECT on the other surface', () => { // The claims are structural: CubeSchema declares `title`, Metric/Dimension // declare `label`. If either declaration changes, this pins the alias table @@ -267,7 +267,7 @@ describe('#4001 batch D — alias claims are true of the surfaces they point at' expect(reject(AnalyticsQuerySchema, { ...QUERY, orderBy: { stage: 'asc' } })).toContain('order'); }); - it('`filters` gets the wrong-layer prescription (`where`), matching the dispatcher\'s #3878 bespoke hint', () => { + it('`filters` gets the wrong-layer prescription (`where`), matching the dispatcher\'s bespoke hint at the /analytics entry', () => { const issues = reject(AnalyticsQuerySchema, { ...QUERY, filters: { is_active: true } }); expect(issues).toContain('where'); }); @@ -285,7 +285,7 @@ describe('#4001 batch D — alias claims are true of the surfaces they point at' // =========================================================================== // 4. The REST wrapper still composes — strictness rides `.extend()` correctly // =========================================================================== -describe('#4001 batch D — the strict base does not break the request wrapper', () => { +describe('batch D — the strict base does not break the request wrapper', () => { it('a valid request body still parses through `AnalyticsQueryRequestSchema`', () => { accept(AnalyticsQueryRequestSchema, { ...QUERY, @@ -294,7 +294,7 @@ describe('#4001 batch D — the strict base does not break the request wrapper', }); }); - it('the #3878 tombstones still fire — `query` and `format` carry their migration text', () => { + it('the retired-envelope tombstones still fire — `query` and `format` carry their migration text', () => { expect(reject(AnalyticsQueryRequestSchema, { ...QUERY, query: { measures: ['count'] } })).toContain('was removed from AnalyticsQueryRequest'); expect(reject(AnalyticsQueryRequestSchema, { ...QUERY, format: 'csv' })).toContain('was removed from AnalyticsQueryRequest'); }); @@ -303,8 +303,8 @@ describe('#4001 batch D — the strict base does not break the request wrapper', // =========================================================================== // 5. The shapes this batch deliberately did NOT close, with the reason // =========================================================================== -describe('#4001 batch D — deliberate non-closures (re-verdicts, not omissions)', () => { - it('`LocationValueSchema` / `AddressSchema` are CLOSED since #13802 — the batch-D `open` verdict was overruled', () => { +describe('batch D, unknown keys refused — deliberate non-closures (re-verdicts, not omissions)', () => { + it('`LocationValueSchema` / `AddressSchema` are CLOSED now — the batch-D `open` verdict was overruled', () => { // Batch D pinned these two as tolerant ("a phone's geolocation payload // carries `heading`/`speed`; a geocoder's address carries `district`") and // said the day the line went red, the decision would have been made diff --git a/packages/spec/src/data/analytics.test.ts b/packages/spec/src/data/analytics.test.ts index b7ca10e93a6..214b37950d5 100644 --- a/packages/spec/src/data/analytics.test.ts +++ b/packages/spec/src/data/analytics.test.ts @@ -66,7 +66,7 @@ describe('TimeUpdateInterval', () => { expect(TimeUpdateInterval.options).toEqual(DateGranularity.options); }); - it('refuses each retired sub-day interval with the retirement prescription (#17296)', () => { + it('refuses each retired sub-day interval with the retirement prescription', () => { // COST DIRECTION. The cheap narrowing is the enum alone: delete three // members and let zod answer its stock "invalid option". That parses // identically and tells an upgrading author nothing, so what is pinned @@ -147,7 +147,7 @@ describe('MetricSchema', () => { // `expect(metric.filters).toHaveLength(1)`). The pin flips: the refusal must // carry the prescription — the fully-qualified key, the removal, and the // migration channel — not merely throw. - it('rejects the removed `filters` key with the retirement prescription (#10414)', () => { + it('rejects the removed `filters` key with the retirement prescription', () => { expect(() => MetricSchema.parse({ label: 'Average Order Value', type: 'avg', @@ -163,7 +163,7 @@ describe('MetricSchema', () => { // refused, the key-equal one included, and the refusal carries the // prescription. The full door-by-door pin lives in // `cube-member-inner-name-retirement.test.ts`. - it('refuses the retired inner `name` with the prescription, whatever its value (#20300)', () => { + it('refuses the retired inner `name` with the prescription, whatever its value', () => { for (const name of ['total_revenue', 'TotalRevenue', '']) { expect(() => MetricSchema.parse({ name, label: 'Total Revenue', type: 'sum', sql: 'amount' }), name) .toThrow(/`measures\.\.name` was removed in @objectstack\/spec 17\.5\.0.*the record key is the metric's name.*os migrate meta --from 17/s); @@ -237,7 +237,7 @@ describe('DimensionSchema', () => { // #20300 — the same flip as the metric's (see that block): the snake_case // check on the inner `name` pinned a value nothing read. - it('refuses the retired inner `name` with the prescription, whatever its value (#20300)', () => { + it('refuses the retired inner `name` with the prescription, whatever its value', () => { for (const name of ['product_category', 'ProductCategory']) { expect(() => DimensionSchema.parse({ name, label: 'Product Category', type: 'string', sql: 'category' }), name) .toThrow(/`dimensions\.\.name` was removed in @objectstack\/spec 17\.5\.0.*the record key is the dimension's name.*os migrate meta --from 17/s); @@ -311,7 +311,7 @@ describe('CubeJoinSchema', () => { * shape). The conversion is `retiredFromLoadPath`, so the AUTHORING funnel still * teaches the tombstone; the data-at-rest seams pin `includeRetired: true`. */ -describe('a persisted cube heals at the door (#18612, ADR-0087 D2)', () => { +describe('a persisted cube heals at the door — the retired join `sql` / `relationship` are stripped (ADR-0087 D2)', () => { /** What `CubeSchema.parse` itself emitted before this retirement. */ const persisted = () => ({ analyticsCubes: [{ @@ -532,7 +532,7 @@ describe('AnalyticsQuerySchema', () => { } }); - it('should NOT default timezone -- absence means the engine resolves it (#4538)', () => { + it('should NOT default timezone -- absence means the engine resolves it', () => { const query = AnalyticsQuerySchema.parse({ measures: ['orders.count'], }); diff --git a/packages/spec/src/data/api-derivation.test.ts b/packages/spec/src/data/api-derivation.test.ts index 1e31d84f2f2..9d79e3f69ec 100644 --- a/packages/spec/src/data/api-derivation.test.ts +++ b/packages/spec/src/data/api-derivation.test.ts @@ -13,7 +13,7 @@ import { } from './api-derivation'; import { ApiMethod, API_OPERATION_ORDER, LEGACY_API_METHODS } from './object.zod'; -describe('api-derivation (#3391)', () => { +describe('api-derivation — one table resolves the effective operations from six primitives', () => { describe('three-state mode', () => { it('undefined apiMethods → unrestricted', () => { const eff = resolveEffectiveApiMethods({}); @@ -29,7 +29,7 @@ describe('api-derivation (#3391)', () => { expect(isApiOperationAllowed(eff, 'bulk')).toBe(true); }); - it('empty array → deny-all (flipped semantics, #3391)', () => { + it('empty array → deny-all (flipped semantics)', () => { const eff = resolveEffectiveApiMethods({ apiMethods: [] }); expect(eff.mode).toBe('deny-all'); for (const p of API_PRIMITIVES) expect(isApiOperationAllowed(eff, p)).toBe(false); @@ -95,7 +95,7 @@ describe('api-derivation (#3391)', () => { expect(isApiOperationAllowed(resolveEffectiveApiMethods({ apiMethods: ['get'], trackHistory: false }), 'history')).toBe(false); }); - it('restore/purge never derive (trash flag retired, #2377)', () => { + it('restore/purge never derive (trash flag retired)', () => { const eff = resolveEffectiveApiMethods({ apiMethods: ['get', 'list', 'create', 'update', 'delete'] }); expect(isApiOperationAllowed(eff, 'restore')).toBe(false); expect(isApiOperationAllowed(eff, 'purge')).toBe(false); @@ -133,7 +133,7 @@ describe('api-derivation (#3391)', () => { }); }); - describe('legacy values are ignored — strip semantics (#3543)', () => { + describe('legacy values are ignored — strip semantics', () => { it('a whitelist of ONLY legacy values resolves to deny-all', () => { const eff = resolveEffectiveApiMethods({ apiMethods: ['import'] }); expect(eff.mode).toBe('deny-all'); @@ -159,7 +159,7 @@ describe('api-derivation (#3391)', () => { }); }); - describe('present-but-unreadable policy fails CLOSED (#3545)', () => { + describe('present-but-unreadable policy fails CLOSED', () => { it('a non-array apiMethods resolves to deny-all, not unrestricted', () => { const eff = resolveEffectiveApiMethods({ apiMethods: 'get,list' as unknown as string[] }); expect(eff.mode).toBe('deny-all'); @@ -283,7 +283,7 @@ describe('api-derivation (#3391)', () => { expect(overlap).toEqual([]); }); - describe('vocabulary split (#3543)', () => { + describe('vocabulary split — authors write six primitives, the wire speaks operations', () => { it('the authored enum is exactly the six primitives', () => { expect(ApiMethod.options).toEqual([...API_PRIMITIVES]); }); diff --git a/packages/spec/src/data/api-methods-batch-conformance.test.ts b/packages/spec/src/data/api-methods-batch-conformance.test.ts index ccb6593e846..bab0221ccfa 100644 --- a/packages/spec/src/data/api-methods-batch-conformance.test.ts +++ b/packages/spec/src/data/api-methods-batch-conformance.test.ts @@ -190,7 +190,7 @@ const SINGLE_RECORD_WRITE_ONLY: Record = { "ADR-0092 D2's identity write guard admits). No console surface multi-selects " + 'API keys — the grid renders no checkbox column because the object grants no ' + 'delete affordance — and a promoted bulk revoke would fan out per row through ' + - 'the action runner rather than hitting /batch (#7802).', + 'the action runner rather than hitting /batch.', // #15873 — maintainer ruling 2026-09-07 (decision batch #64, option (a), // verbatim 「同意」): the data door admits `update` so an administrator can set // the four platform-owned columns (`require_mfa`, `parent_organization_id`, @@ -218,12 +218,12 @@ const SINGLE_RECORD_WRITE_ONLY: Record = { // both stand. sys_organization: 'Administrators set the platform-owned columns through single-record PATCH ' + - 'and the derived update-mode import door (#15873 ruled `update`; both are ' + + 'and the derived update-mode import door (a ruling grants `update`; both are ' + 'column-clamped per row by ADR-0092 D2). `bulk` — /batch and the *Many ' + 'routes — is not granted: no console surface multi-selects organizations ' + '(the list view declares no bulk actions and the object grants no delete ' + 'affordance), and a promoted bulk edit would fan out per row through the ' + - 'action runner rather than hitting /batch (#7802).', + 'action runner rather than hitting /batch.', }; /** Every `*.object.ts` under `packages/`, skipping build output and deps. */ @@ -283,7 +283,7 @@ function collectWhitelists(): Whitelist[] { const WHITELISTS = collectWhitelists(); -describe('apiMethods conformance — single-record writes imply batch (#3026)', () => { +describe('apiMethods conformance — single-record writes imply batch', () => { it('scans a plausible number of declarations (guards a silently empty sweep)', () => { // A scan that matches nothing passes every assertion below vacuously — the // exact failure mode this file exists to prevent. Pin a floor instead. diff --git a/packages/spec/src/data/authoring-key-lint.test.ts b/packages/spec/src/data/authoring-key-lint.test.ts index c6c1fc0f100..11564166872 100644 --- a/packages/spec/src/data/authoring-key-lint.test.ts +++ b/packages/spec/src/data/authoring-key-lint.test.ts @@ -34,7 +34,7 @@ function runComparator( return out; } -describe('lintAuthoredRecordKeys (#3786)', () => { +describe('lintAuthoredRecordKeys — an unknown authoring key is reported, not swallowed', () => { it('is silent when every key is declared', () => { expect(runComparator({ a: 1, b: 2 }, ['a', 'b', 'c'])).toEqual([]); }); @@ -128,7 +128,7 @@ describe('the guidance tables do not rot', () => { * (`kernel/metadata-authoring-lint.ts`: `strict` → silent). Reaching for the * lint to prove reachability here would prove nothing — it never fires. */ -describe('the `id_field` retirement is reached, not merely declared (#16632)', () => { +describe('the `id_field` retirement is reached, not merely declared', () => { const authored = { name: 'account_id', type: 'lookup', reference: 'crm_account' } as const; const unrecognizedKeyMessage = (value: unknown): string => { const r = FieldSchema.safeParse(value); diff --git a/packages/spec/src/data/autonumber-format.test.ts b/packages/spec/src/data/autonumber-format.test.ts index efbb8414fb3..434bd05965d 100644 --- a/packages/spec/src/data/autonumber-format.test.ts +++ b/packages/spec/src/data/autonumber-format.test.ts @@ -20,7 +20,7 @@ const NOW = new Date('2026-06-17T21:30:00.000Z'); // #6555 — the contract default for a format-less autonumber field. Before it, // the SQL driver and the engine's in-memory fallback each substituted their own // answer and the two disagreed (`0001` vs `1`) for the very same metadata. -describe('DEFAULT_AUTONUMBER_FORMAT / resolveAutonumberFormat (#6555)', () => { +describe('DEFAULT_AUTONUMBER_FORMAT / resolveAutonumberFormat — one declared default both sides read', () => { it('fixes the contract default at `{0000}` — four-digit zero padding', () => { expect(DEFAULT_AUTONUMBER_FORMAT).toBe('{0000}'); }); @@ -33,7 +33,7 @@ describe('DEFAULT_AUTONUMBER_FORMAT / resolveAutonumberFormat (#6555)', () => { expect(resolveAutonumberFormat({ autonumberFormat: undefined })).toBe(DEFAULT_AUTONUMBER_FORMAT); }); - it('prefers the canonical `autonumberFormat` over the `format` shorthand (#1603)', () => { + it('prefers the canonical `autonumberFormat` over the `format` shorthand', () => { expect(resolveAutonumberFormat({ autonumberFormat: 'INV-{0000}' })).toBe('INV-{0000}'); expect(resolveAutonumberFormat({ format: 'TK-{00000}' })).toBe('TK-{00000}'); expect(resolveAutonumberFormat({ autonumberFormat: 'A-{000}', format: 'B-{000}' })).toBe('A-{000}'); @@ -212,7 +212,7 @@ describe('renderAutonumber', () => { }); }); -describe('readAutonumberCounter — the inverse of renderAutonumber (#6560)', () => { +describe('readAutonumberCounter — the inverse of renderAutonumber', () => { // The rule moved here out of two hand-written copies (engine + driver-sql) // that PR #6553 left behind; these cases mirror what that PR's own tests pin // on each side, so a change here fails in spec before it can diverge there. diff --git a/packages/spec/src/data/autonumber-unanchored-boundary.test.ts b/packages/spec/src/data/autonumber-unanchored-boundary.test.ts index bc64f1b6e2d..3c3c12d3719 100644 --- a/packages/spec/src/data/autonumber-unanchored-boundary.test.ts +++ b/packages/spec/src/data/autonumber-unanchored-boundary.test.ts @@ -48,8 +48,8 @@ function driverSqlUnanchoredReading(value: string): number | undefined { return Number.isFinite(n) ? n : undefined; } -describe('the unanchored readback boundary (#7287 ruling: mixed content is out of contract)', () => { - it('the declared default format {0000} (#6555, PR #7265) really does render an UNANCHORED pair', () => { +describe('the unanchored readback boundary (ruled: mixed content is out of contract)', () => { + it('the declared default format {0000} really does render an UNANCHORED pair', () => { // The premise the boundary hangs on: the default authoring shape is the one // that lands in this slot, which is why the boundary is worth declaring. const r = renderAutonumber({ tokens: parseAutonumberFormat('{0000}'), seq: 7, now: NOW }); @@ -69,7 +69,7 @@ describe('the unanchored readback boundary (#7287 ruling: mixed content is out o ['v2.1', 'digits inside an unrelated version-shaped identifier'], ['DRAFT', 'no digits at all — still out of contract, and still undefined'], ])( - 'out of contract: %s reads as undefined — the declared boundary, not a gap (#7287)', + 'out of contract: %s reads as undefined — the declared boundary, not a gap', (value) => { expect(readAutonumberCounter(value, '', '')).toBeUndefined(); }, diff --git a/packages/spec/src/data/bulk-write-hook-conformance.test.ts b/packages/spec/src/data/bulk-write-hook-conformance.test.ts index 64a9fd17011..21370f4664e 100644 --- a/packages/spec/src/data/bulk-write-hook-conformance.test.ts +++ b/packages/spec/src/data/bulk-write-hook-conformance.test.ts @@ -111,12 +111,12 @@ describe('bulk-write hook dispatch contract — the table', () => { }); describe('bulk-write hook dispatch contract — delivery status', () => { - it('records the after half as DELIVERED by #5038', () => { + it('records the after half as DELIVERED — the engine fires it once per row', () => { expect(byEvent('afterUpdate')).toMatchObject({ delivered: true, engineDeliveryIssue: 5038 }); expect(byEvent('afterDelete')).toMatchObject({ delivered: true, engineDeliveryIssue: 5038 }); }); - it('records the before half as DELIVERED by #5574\'s engine half', () => { + it('records the before half as DELIVERED — the engine dispatches it per row too', () => { // ⚠️ This case was written to go red exactly once, and it did. Until // #5574's engine half it read "CONTRACTED but not yet delivered" and // asserted `delivered: false` on both `before*` entries — the honest diff --git a/packages/spec/src/data/calendar-day.test.ts b/packages/spec/src/data/calendar-day.test.ts index dbe5ea7619a..02697fa49a5 100644 --- a/packages/spec/src/data/calendar-day.test.ts +++ b/packages/spec/src/data/calendar-day.test.ts @@ -69,7 +69,7 @@ describe('nextUtcCalendarDay', () => { * compiled to that day's midnight and missed the rest of it. Year 0100 is the * control that always answered, and 2026 the everyday one. */ -describe('[#20550] years 0001..0099 are calendar days, not 1900..1999', () => { +describe('years 0001..0099 are calendar days, not 1900..1999', () => { /** day · the day after it */ const DAYS: ReadonlyArray = [ ['0001-01-01', '0001-01-02'], @@ -117,7 +117,7 @@ describe('[#20550] years 0001..0099 are calendar days, not 1900..1999', () => { * no upper bound. The answer is neither `null` ("not a calendar day", which * would compile the day's midnight and miss the rest of it) nor a string. */ -describe('[#20600] the last supported day answers UNBOUNDED_ABOVE', () => { +describe('the last supported day answers UNBOUNDED_ABOVE', () => { it('9999-12-31 answers UNBOUNDED_ABOVE — not a five-digit day, not null', () => { const next = nextUtcCalendarDay('9999-12-31'); expect(next).toBe(UNBOUNDED_ABOVE); diff --git a/packages/spec/src/data/context-tokens.test.ts b/packages/spec/src/data/context-tokens.test.ts index 5a37b76e88c..cbd245d33bf 100644 --- a/packages/spec/src/data/context-tokens.test.ts +++ b/packages/spec/src/data/context-tokens.test.ts @@ -187,7 +187,7 @@ describe('classifyFilterToken — the record-context token', () => { * abolish, and it hit the author backwards: `{TODAY}` was refused by name while * `{TODAY()}` quietly returned the wrong rows. */ -describe('classifyFilterToken — brace-wrapped by intent (#5586)', () => { +describe('classifyFilterToken — brace-wrapped by intent', () => { // Each of these is a shape an author reaches for when migrating from another // system's macro syntax: call syntax, kebab-case, natural language, a dotted // path. All four used to classify as `null`. diff --git a/packages/spec/src/data/currency-mode-family-closure.pin.test.ts b/packages/spec/src/data/currency-mode-family-closure.pin.test.ts index 6df6ea9e757..c08028acff1 100644 --- a/packages/spec/src/data/currency-mode-family-closure.pin.test.ts +++ b/packages/spec/src/data/currency-mode-family-closure.pin.test.ts @@ -345,7 +345,7 @@ const SITES: { site: string; file: string; legs: Leg[] }[] = [ ]; const RUNTIME_PIN = 'packages/services/service-analytics/src/__tests__/currency-mode-relay.test.ts'; -describe('[#20126] currency-mode family — the enumerating closure pin', () => { +describe('currency-mode family — the enumerating closure pin: `defaultCurrency` holds only under `fixed`', () => { it('the corpus reaches every family site, and the released entries sit outside it', () => { for (const { site, file, legs } of SITES) { expect(fs.existsSync(path.join(REPO_ROOT, file)), `site ${site}: ${file} must exist`).toBe(true); @@ -400,7 +400,7 @@ describe('[#20126] currency-mode family — the enumerating closure pin', () => }); }); -describe('[#20126] controls — each rule can fail, and passes what it must', () => { +describe('currency-mode closure controls — each rule can fail, and passes what it must', () => { const ruleA = (text: string): boolean[] => judgeRuleA(text).map((j) => j.ok); const ruleB = (text: string): number[] => judgeRuleB(text).hits; const DATE = ['ADR', '0053'].join('-'); diff --git a/packages/spec/src/data/currency-precision-iso4217.test.ts b/packages/spec/src/data/currency-precision-iso4217.test.ts index 91b00479d25..2b130a1e546 100644 --- a/packages/spec/src/data/currency-precision-iso4217.test.ts +++ b/packages/spec/src/data/currency-precision-iso4217.test.ts @@ -41,7 +41,7 @@ function firstIssue(result: { success: boolean; error?: { issues: Array<{ code: const RETIREMENT_LEAD = '`currencyConfig.precision` was removed in @objectstack/spec 17.5.0 (ADR-0049 enforce-or-remove)'; -describe('#19992 — `currencyConfig.precision` is removed: refused with the prescription, whatever its value', () => { +describe('`currencyConfig.precision` is removed: refused with the prescription, whatever its value', () => { it('refuses the key with the full envelope — code, path, offending key, and the prescription\'s clauses', () => { const result = CurrencyConfigSchema.safeParse({ precision: 2, currencyMode: 'fixed', defaultCurrency: 'USD', @@ -160,7 +160,7 @@ describe('#19992 — `currencyConfig.precision` is removed: refused with the pre }); }); -describe('#19992 — data at rest: a stored row carrying the baked `precision: 2` is served canonical', () => { +describe('the removed `currencyConfig.precision` at rest: a stored row carrying the baked `precision: 2` is served canonical', () => { // The ADR-0087 conversion `currency-config-precision-removed` is retired from // the load path (authors are refused, above) and replayed by the stored-row // seam, which is what keeps rows written under the old `.overwrite()` @@ -198,7 +198,7 @@ describe('#19992 — data at rest: a stored row carrying the baked `precision: 2 }); }); -describe('#20011 — field-level `precision` is total digits, never judged against the currency (FieldSchema)', () => { +describe('field-level `precision` is total digits, never judged against the currency (FieldSchema)', () => { // Ruling 5805782503 (letter 乙): a currency's decimal places are the // currency's, not a setting — and the key's own describe is "Total digits". // The #7918 check that compared this key with the fixed currency's fraction @@ -221,7 +221,7 @@ describe('#20011 — field-level `precision` is total digits, never judged again expect(result.data!.precision).toBe(2); }); - it('flipped: `precision: 2` on a fixed-JPY field parses — a DECIMAL(2,0) amount — where #7918 refused it', () => { + it('flipped: `precision: 2` on a fixed-JPY field parses — a DECIMAL(2,0) amount — where the ISO 4217 width check used to refuse it', () => { const result = FieldSchema.safeParse({ ...base, precision: 2, currencyConfig: fixed('JPY') }); expect(result.success).toBe(true); expect(result.data!.precision).toBe(2); @@ -277,7 +277,7 @@ describe('#20011 — field-level `precision` is total digits, never judged again expect(reparsed.data!.fields.amount.precision).toBe(18); }); - it('flipped (#19992): the currencyConfig twin no longer judges a width — it refuses the key itself, at the FieldSchema door', () => { + it('flipped: the currencyConfig twin no longer judges a width — it refuses the key itself, at the FieldSchema door', () => { // Was: a `custom` issue at ['currencyConfig', 'precision'] naming both // fraction-digit counts. The twin key is gone, so the refusal is the // closed shape's, located at the config object, carrying the prescription. @@ -293,7 +293,7 @@ describe('#20011 — field-level `precision` is total digits, never judged again expect(issue.message).not.toContain('fraction digits;'); }); - it('flipped (#19992): with both keys authored, only the removed twin is refused — the field-level key still raises nothing', () => { + it('flipped: with both keys authored, only the removed twin is refused — the field-level key still raises nothing', () => { const result = FieldSchema.safeParse({ ...base, precision: 2, currencyConfig: { precision: 2, currencyMode: 'fixed', defaultCurrency: 'JPY' }, @@ -308,7 +308,7 @@ describe('#20011 — field-level `precision` is total digits, never judged again }); describe('the CLDR digit table — kept for the `iso_4217_currency` value domain, which reads its key set', () => { - it("carries the #7918 card's measured anchors", () => { + it('carries the measured anchors — 0 digits for JPY, 2 for USD, 3 for KWD', () => { // 0: JPY/KRW/CLP/ISK/VND — 2: USD/EUR/CNY/GBP — 3: KWD/BHD/OMR/TND for (const c of ['JPY', 'KRW', 'CLP', 'ISK', 'VND']) expect(CURRENCY_FRACTION_DIGITS[c]).toBe(0); for (const c of ['USD', 'EUR', 'CNY', 'GBP']) expect(CURRENCY_FRACTION_DIGITS[c]).toBe(2); diff --git a/packages/spec/src/data/data-engine.test.ts b/packages/spec/src/data/data-engine.test.ts index a1ac0daeaba..9906f701a92 100644 --- a/packages/spec/src/data/data-engine.test.ts +++ b/packages/spec/src/data/data-engine.test.ts @@ -194,7 +194,7 @@ describe('DataEngineUpdateOptionsSchema', () => { expect(options).toBeDefined(); }); - it('REJECTS the retired `upsert` flag, with the fix in the message (#8057)', () => { + it('REJECTS the retired `upsert` flag, with the fix in the message', () => { // Tombstoned, not deleted: the schema is not `.strict()`, so a plain // deletion would silently strip the key — the exact accepted-and-dropped // silence #8057 removes. `retiredKey()` makes the removal audible. @@ -389,7 +389,7 @@ describe('EngineQueryOptionsSchema', () => { // ── `search`: both spellings, canonical one first (#7178) ──────────── - it('accepts the BARE query string — the canonical ADR-0061 D1 spelling (#7178)', () => { + it('accepts the BARE query string — the canonical ADR-0061 D1 spelling', () => { // This is the pin that was RED before #7178: the schema declared only the // structured form, so the spelling the executor actually serves, every // surface sends, and `BaseQuerySchema.search` already accepts was rejected @@ -398,7 +398,7 @@ describe('EngineQueryOptionsSchema', () => { expect(options.search).toBe('acme corp'); }); - it('still accepts the structured FullTextSearch form — the Tier-2 knobs (#7178)', () => { + it('still accepts the structured FullTextSearch form — the Tier-2 knobs', () => { const options = EngineQueryOptionsSchema.parse({ search: { query: 'acme corp', fields: ['name', 'industry'] }, }); @@ -407,7 +407,7 @@ describe('EngineQueryOptionsSchema', () => { expect((options.search as { fields?: string[] }).fields).toEqual(['name', 'industry']); }); - it('accepts search alongside searchFields, in both spellings (#7178)', () => { + it('accepts search alongside searchFields, in both spellings', () => { expect(EngineQueryOptionsSchema.parse({ search: 'acme', searchFields: ['name'], }).searchFields).toEqual(['name']); @@ -416,14 +416,14 @@ describe('EngineQueryOptionsSchema', () => { }).searchFields).toEqual(['name']); }); - it('rejects a search that is neither a string nor a FullTextSearch (#7178)', () => { + it('rejects a search that is neither a string nor a FullTextSearch', () => { // The union widens the accept face by exactly one spelling — it does not // open the key to anything. expect(() => EngineQueryOptionsSchema.parse({ search: 42 })).toThrow(); expect(() => EngineQueryOptionsSchema.parse({ search: { fields: ['name'] } })).toThrow(); }); - it('matches BaseQuerySchema.search — the two sibling schemas agree (#7178)', () => { + it('matches BaseQuerySchema.search — the two sibling schemas agree', () => { // The whole point of the repair: what QuerySchema accepts for `search`, // the engine options schema accepts too. `DriverQuery` (= Omit) is assignable to `EngineQueryOptionsParsed` again because of @@ -434,7 +434,7 @@ describe('EngineQueryOptionsSchema', () => { } }); - it('rejects the removed cursor/distinct keys with the query.* prescriptions (#4286)', () => { + it('rejects the removed cursor/distinct keys with the query.* prescriptions', () => { expect(() => EngineQueryOptionsSchema.parse({ cursor: { id: 'x' } })) .toThrow(/query\.cursor.*removed/s); expect(() => EngineQueryOptionsSchema.parse({ distinct: true })) @@ -460,7 +460,7 @@ describe('EngineUpdateOptionsSchema', () => { expect(options.multi).toBe(true); }); - it('REJECTS the retired `upsert` flag with the same #8057 tombstone as the legacy schema', () => { + it('REJECTS the retired `upsert` flag with the same tombstone as the legacy schema', () => { expect(() => EngineUpdateOptionsSchema.parse({ where: { status: 'inactive' }, @@ -507,7 +507,7 @@ describe('EngineAggregateOptionsSchema', () => { // and the credential-aggregation guard walks it); the declaration used to // say `string[]`, so every correct caller had to cast. These pin the // declaration to the enforced contract, in both directions. - it('accepts structured { field, dateGranularity, alias } groupBy buckets (#8032)', () => { + it('accepts structured { field, dateGranularity, alias } groupBy buckets', () => { const result = EngineAggregateOptionsSchema.safeParse({ groupBy: ['region', { field: 'closed_at', dateGranularity: 'quarter' }, { field: 'owner_id', alias: 'owner' }], aggregations: [{ function: 'sum', field: 'amount', alias: 'total' }], @@ -624,7 +624,7 @@ describe('DataEngineFindRequestSchema', () => { expect(request.query?.where).toBeDefined(); }); - it('folds legacy params into their canonical keys and drops the aliases (#3795, #4346)', () => { + it('folds legacy params into their canonical keys and drops the aliases', () => { const request = DataEngineFindRequestSchema.parse({ method: 'find', object: 'account', @@ -651,7 +651,7 @@ describe('DataEngineFindRequestSchema', () => { } }); - it('lowers the record sort spellings while folding (#3795)', () => { + it('lowers the record sort spellings while folding', () => { const named = DataEngineFindRequestSchema.parse({ method: 'find', object: 'account', @@ -670,7 +670,7 @@ describe('DataEngineFindRequestSchema', () => { ]); }); - it('tolerates a redundant identical spelling, refuses a conflicting one (#3795)', () => { + it('tolerates a redundant identical spelling, refuses a conflicting one', () => { const redundant = DataEngineFindRequestSchema.parse({ method: 'find', object: 'account', @@ -690,7 +690,7 @@ describe('DataEngineFindRequestSchema', () => { } }); - it('refuses a conflicting value on every alias pair (#3795, #4346)', () => { + it('refuses a conflicting value on every alias pair', () => { const cases: Array> = [ { filter: { a: 1 }, where: { b: 2 } }, { select: ['a'], fields: ['b'] }, @@ -719,7 +719,7 @@ describe('DataEngineFindOneRequestSchema', () => { expect(request.method).toBe('findOne'); }); - it('folds legacy params into canonical keys (backward compat input, #3795)', () => { + it('folds legacy params into canonical keys (backward compat input)', () => { const request = DataEngineFindOneRequestSchema.parse({ method: 'findOne', object: 'account', @@ -786,7 +786,7 @@ describe('DataEngineUpdateRequestSchema', () => { expect(request.id).toBe('123'); }); - it('folds a legacy filter into where (backward compat input, #3795)', () => { + it('folds a legacy filter into where (backward compat input)', () => { const request = DataEngineUpdateRequestSchema.parse({ method: 'update', object: 'account', @@ -829,7 +829,7 @@ describe('DataEngineDeleteRequestSchema', () => { expect(request.id).toBe('123'); }); - it('folds a legacy filter into where (backward compat input, #3795)', () => { + it('folds a legacy filter into where (backward compat input)', () => { const request = DataEngineDeleteRequestSchema.parse({ method: 'delete', object: 'account', @@ -881,7 +881,7 @@ describe('DataEngineCountRequestSchema', () => { expect(request.query?.where).toBeDefined(); }); - it('folds a legacy filter into where (backward compat input, #3795)', () => { + it('folds a legacy filter into where (backward compat input)', () => { const request = DataEngineCountRequestSchema.parse({ method: 'count', object: 'account', @@ -894,7 +894,7 @@ describe('DataEngineCountRequestSchema', () => { expect(request.query && 'filter' in request.query).toBe(false); }); - it('refuses filter + where with different values (#3795)', () => { + it('refuses filter + where with different values', () => { const result = DataEngineCountRequestSchema.safeParse({ method: 'count', object: 'account', @@ -1182,7 +1182,7 @@ describe('Integration Tests', () => { }); -describe('DroppedFieldsEventSchema.reason (#3407, widened by #6437)', () => { +describe('DroppedFieldsEventSchema.reason — why a write dropped submitted fields, widened past the readonly pair', () => { // The ACCEPTANCE surface: this enum is what validates on the protocol // responses that carry `droppedFields` (`api/batch.zod.ts`, // `api/protocol.zod.ts`), so the accepted set is the contract, not a label. @@ -1195,7 +1195,7 @@ describe('DroppedFieldsEventSchema.reason (#3407, widened by #6437)', () => { } }); - it('primary_key is the value the engine reports for the ruled-non-id strip (#6262/#6433, #6435)', () => { + it('primary_key is the value the engine reports when it strips a payload id it ruled is not an identifier', () => { const parsed = DroppedFieldsEventSchema.parse({ object: 'task', fields: ['id'], reason: 'primary_key', }); diff --git a/packages/spec/src/data/datasource-credential-redaction.test.ts b/packages/spec/src/data/datasource-credential-redaction.test.ts index 74ab5bc992f..8ee4e2a1371 100644 --- a/packages/spec/src/data/datasource-credential-redaction.test.ts +++ b/packages/spec/src/data/datasource-credential-redaction.test.ts @@ -67,7 +67,7 @@ describe('derivation pin: the moved module derives EXACTLY what the service-data expect(refusedCredentialKeys('not-a-real-driver')).toEqual([]); }); - it('full redactable set, byte-equal per driver (the #8300 drift guard)', () => { + it('full redactable set, byte-equal per driver (the drift guard on the one credential-key definition)', () => { // These literals ARE the pin: they reproduce, key for key and in order, // what `service-datasource`'s `redactableConfigKeys` answered on // origin/main at the move. Changing them is changing the platform's @@ -229,7 +229,7 @@ describe('write-door alignment: redactUrlPassword removes exactly what urlUserin } }); - it('redaction preserves the USERNAME byte-for-byte — the #8876 half of the same alignment', () => { + it('redaction preserves the USERNAME byte-for-byte — the username half of the same alignment', () => { // `urlUserinfoUsername` shares the password half's boundary parse by // construction; this pins the redactor to the same grammar from the other // side: stripping the password must never move or rewrite the username the @@ -240,7 +240,7 @@ describe('write-door alignment: redactUrlPassword removes exactly what urlUserin }); }); -describe('redactUrlCredentialQueryParams — the #8337 read half', () => { +describe('redactUrlCredentialQueryParams — the read half: a credential query parameter is never served back', () => { it('strips the credential pair whole and serves the parameter-absent shape', () => { expect(redactUrlCredentialQueryParams('libsql://x.turso.io?authToken=eyJhbGci.x.y')) .toBe('libsql://x.turso.io'); @@ -294,7 +294,7 @@ describe('write-door alignment, query half: redactUrlCredentials removes exactly } }); - it('redactDatasourceConfig serves a stored `?authToken=` row parameter-free, naming `url` (the #8337 served-back-cleartext regression)', () => { + it('redactDatasourceConfig serves a stored `?authToken=` row parameter-free, naming `url` (the served-back-cleartext regression)', () => { const { config, redactedKeys } = redactDatasourceConfig('turso', { url: 'libsql://x.turso.io?authToken=eyJhbGci.x.y', syncUrl: 'libsql://x.turso.io?tls=1&authToken=eyJhbGci.x.y', @@ -315,7 +315,7 @@ describe('write-door alignment, query half: redactUrlCredentials removes exactly }); }); -describe('passthrough secret redaction (#9040) — the nested spellings the key-name scrub cannot see', () => { +describe('passthrough secret redaction — the nested spellings the key-name scrub cannot see', () => { const STORED = { url: 'mongodb://app@mongo.internal:27017/events', options: { @@ -335,7 +335,7 @@ describe('passthrough secret redaction (#9040) — the nested spellings the key- expect(redactedKeys).toEqual(['options.auth.password']); }); - it('scrubs a stored legacy `driver: "mongo"` row identically — aliases resolve (#6345)', () => { + it('scrubs a stored legacy `driver: "mongo"` row identically — aliases resolve', () => { const { redactedKeys } = redactDatasourceConfig('mongo', STORED); expect(redactedKeys).toEqual(['options.auth.password']); }); diff --git a/packages/spec/src/data/datasource.test.ts b/packages/spec/src/data/datasource.test.ts index 180825cc050..f8c6c4ced1b 100644 --- a/packages/spec/src/data/datasource.test.ts +++ b/packages/spec/src/data/datasource.test.ts @@ -16,7 +16,7 @@ describe('DriverType', () => { }); }); -describe('datasource.capabilities — RETIRED (#4583)', () => { +describe('datasource.capabilities — RETIRED', () => { // These used to be five tests asserting the eleven flags parsed and defaulted. // They did, faithfully, for a block no runtime ever read — the shape #4001 // named: a schema that is loose (or here, merely unread) eventually grows a @@ -332,7 +332,7 @@ describe('DatasourceSchema', () => { }); - it('refuses datasource with environment variables in config — placeholders are not resolved here (#8336)', () => { + it('refuses datasource with environment variables in config — placeholders are not resolved here', () => { // INVERTED acceptance pin. This test used to pin (#7990 census) that // `${…}` placeholders in NON-credential connection keys parse — recording // the measured fact that nothing resolves them and the strings reach the @@ -550,7 +550,7 @@ describe('SchemaMode & External Federation (ADR-0015)', () => { // (issue #8153 comment, 2026-08-13): allow `external.credentialsRef` — and // only it — on managed; keep refusing every federation key. - it('accepts the exact shape createDatasource writes on a managed row (#8153 happy path)', () => { + it('accepts the exact shape createDatasource writes on a managed row (the happy path)', () => { // The measured persisted shape from #8153 — no `schemaMode`, so it // defaults to 'managed'; `external` carries only the secrets-store ref. const wizardRow = { @@ -568,7 +568,7 @@ describe('SchemaMode & External Federation (ADR-0015)', () => { } }); - it('round-trips the wizard row: the parsed output (defaults applied) re-parses valid (#8153)', () => { + it('round-trips the wizard row: the parsed output (defaults applied) re-parses valid', () => { // `PUT /meta` re-parses what `GET` served — the parsed shape, with every // `external` default key materialized. The allowance judges VALUES, not // key presence, precisely so this round-trip stays valid. @@ -589,7 +589,7 @@ describe('SchemaMode & External Federation (ADR-0015)', () => { } }); - it('still refuses `external.allowWrites` on a managed row, with the existing guidance (#8153)', () => { + it('still refuses `external.allowWrites` on a managed row, with the existing guidance', () => { const result = DatasourceSchema.safeParse({ name: 'default', driver: 'postgres', @@ -605,7 +605,7 @@ describe('SchemaMode & External Federation (ADR-0015)', () => { } }); - it('still refuses `external.allowedSchemas` on a managed row (#8153)', () => { + it('still refuses `external.allowedSchemas` on a managed row', () => { const result = DatasourceSchema.safeParse({ name: 'default', driver: 'postgres', @@ -620,7 +620,7 @@ describe('SchemaMode & External Federation (ADR-0015)', () => { } }); - it('still refuses non-default `validation` and `queryTimeoutMs` on a managed row (#8153)', () => { + it('still refuses non-default `validation` and `queryTimeoutMs` on a managed row', () => { const result = DatasourceSchema.safeParse({ name: 'default', driver: 'postgres', @@ -635,7 +635,7 @@ describe('SchemaMode & External Federation (ADR-0015)', () => { } }); - it('refuses credentialsRef + a federation key together — the allowance does not smuggle (#8153)', () => { + it('refuses credentialsRef + a federation key together — the allowance does not smuggle', () => { const result = DatasourceSchema.safeParse({ name: 'default', driver: 'postgres', @@ -651,7 +651,7 @@ describe('SchemaMode & External Federation (ADR-0015)', () => { } }); - it('accepts explicitly-written DEFAULT federation values on a managed row — inert content (#8153)', () => { + it('accepts explicitly-written DEFAULT federation values on a managed row — inert content', () => { // Deliberate: the check judges effective federation content. An explicit // `allowWrites: false` is byte-equal to the applied default and gates // nothing — refusing it would 422 re-parses of served output, which @@ -670,7 +670,7 @@ describe('SchemaMode & External Federation (ADR-0015)', () => { expect(result.success).toBe(true); }); - it('keeps full external acceptance on schemaMode="external" — unchanged by #8153', () => { + it('keeps full external acceptance on schemaMode="external" — unchanged by the managed-row credentialsRef allowance', () => { const result = DatasourceSchema.safeParse({ name: 'warehouse', driver: 'postgres', diff --git a/packages/spec/src/data/date-range-presets.test.ts b/packages/spec/src/data/date-range-presets.test.ts index 99741182445..27f6c8a7541 100644 --- a/packages/spec/src/data/date-range-presets.test.ts +++ b/packages/spec/src/data/date-range-presets.test.ts @@ -11,7 +11,7 @@ import { import { DATE_MACRO_WRAPPED_RE, isDateMacroToken } from './date-macros.zod'; import { nextUtcCalendarDay } from './calendar-day'; -describe('date-range preset vocabulary (#4614, re-homed by #8793)', () => { +describe('date-range preset vocabulary — one source of truth, read by both the UI and the data side', () => { it('declares exactly the thirteen shipped preset names, in filter-bar order', () => { // Pinned literally: this list is a published vocabulary (dashboard // defaultRange / date-filter defaultValue accept it, filter comparands @@ -163,7 +163,7 @@ function prescribedDayCount(startDay: string, endDay: string): number { return (midnightUtc(exclusiveEnd as string) - midnightUtc(startDay)) / DAY_MS; } -describe('the prescribed window covers exactly the days the preset names (#17014)', () => { +describe('the prescribed window covers exactly the days the preset names', () => { it('states an expected window for every declared preset, and for nothing else', () => { // The fence: a preset added to the vocabulary without a stated extent // fails here rather than silently inheriting whichever end convention its