Skip to content

Commit 89c4b30

Browse files
committed
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 <noreply@anthropic.com>
1 parent 0a34803 commit 89c4b30

20 files changed

Lines changed: 95 additions & 95 deletions

‎packages/spec/src/data/aggregate-field-type-compatibility.test.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,12 +78,12 @@ describe('AGGREGATE_FIELD_TYPE_COMPATIBILITY — the ruled rows, resolved agains
7878
expect(sorted(AGGREGATE_FIELD_TYPE_COMPATIBILITY.count)).toEqual(sorted(FieldType.options));
7979
});
8080

81-
it('[#20808] `count_distinct`: every FieldType EXCEPT the JSON-stored ones', () => {
81+
it('`count_distinct`: every FieldType EXCEPT the JSON-stored ones', () => {
8282
expect(sorted(AGGREGATE_FIELD_TYPE_COMPATIBILITY.count_distinct))
8383
.toEqual(sorted(FieldType.options.filter((t) => !JSON_STORED.includes(t))));
8484
});
8585

86-
it('[#20808] the JSON-stored bucket IS the field-value structured-JSON class plus the multi-option types', () => {
86+
it('the JSON-stored bucket IS the field-value structured-JSON class plus the multi-option types', () => {
8787
// A type joining either class elsewhere is stored in a JSON column by every
8888
// SQL driver, and no two backends compare such values alike — so it reds
8989
// here until the count_distinct row records a decision.
@@ -147,7 +147,7 @@ describe('isAggregateCompatibleWithFieldType — the pairs the card is about', (
147147
}
148148
});
149149

150-
it('accepts `sum` / `avg` / `min` / `max` over booleans — #11152 (numbers on every backend), upheld by decision batch #80', () => {
150+
it('accepts `sum` / `avg` / `min` / `max` over booleans — numbers on every backend, a ruling that outranks the refused-by-default rule', () => {
151151
for (const fn of ['sum', 'avg', 'min', 'max'] as const) {
152152
expect(isAggregateCompatibleWithFieldType(fn, 'boolean')).toBe(true);
153153
expect(isAggregateCompatibleWithFieldType(fn, 'toggle')).toBe(true);
@@ -181,7 +181,7 @@ describe('isAggregateCompatibleWithFieldType — the pairs the card is about', (
181181
}
182182
});
183183

184-
it('[#20808] accepts `count_distinct` over every scalar-stored type — `formula`, `percent`, `select`, `lookup`, `file` included — and refuses the JSON-stored ones', () => {
184+
it('accepts `count_distinct` over every scalar-stored type — `formula`, `percent`, `select`, `lookup`, `file` included — and refuses the JSON-stored ones', () => {
185185
for (const t of FieldType.options) {
186186
expect(isAggregateCompatibleWithFieldType('count_distinct', t), t).toBe(!JSON_STORED.includes(t));
187187
}

‎packages/spec/src/data/analytics-date-range-closed-vocabulary.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const RETIRED_SPELLINGS = [
5757
'',
5858
];
5959

60-
describe('AnalyticsQuerySchema.timeDimensions[].dateRange — closed vocabulary (#16041)', () => {
60+
describe('AnalyticsQuerySchema.timeDimensions[].dateRange — closed vocabulary', () => {
6161
it('derives the string arm from date-range-presets.ts — no fourth copy of the list', () => {
6262
// The module header records the vocabulary once existed in three drifting
6363
// copies. The enum's options ARE the module's tuple, in its order.

‎packages/spec/src/data/analytics-date-range-two-bound-window.test.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ const REFUSED_ARITIES: ReadonlyArray<readonly unknown[]> = [
6060
['{7_days_ago}'], // one macro token is a bound, not a window
6161
];
6262

63-
describe('AnalyticsDateRangeSchema — the array arm is exactly two string bounds (#17598 ①)', () => {
63+
describe('AnalyticsDateRangeSchema — the array arm is exactly two string bounds', () => {
6464
it('accepts the two-bound windows the contract has always prescribed', () => {
6565
// The control. Without it a narrowing that refused EVERY array would pass
6666
// every refusal assertion below.
@@ -127,7 +127,7 @@ describe('AnalyticsDateRangeSchema — the array arm is exactly two string bound
127127
});
128128
});
129129

130-
describe('analyticsDateRangeRefusalMessage — each ORIGIN gets a true sentence (#17598 ②)', () => {
130+
describe('analyticsDateRangeRefusalMessage — each ORIGIN gets a true sentence', () => {
131131
it('states the schema origin only when the schema is where it was refused', () => {
132132
for (const input of [...REFUSED_ARITIES, 'Last 7 days', 42, null]) {
133133
const atSchema = analyticsDateRangeRefusalMessage(input, 'schema');
@@ -170,7 +170,7 @@ describe('analyticsDateRangeRefusalMessage — each ORIGIN gets a true sentence
170170
expect(analyticsDateRangeRefusalMessage({ start: '2026-01-01' }, 'schema')).toContain('received object');
171171
});
172172

173-
it('⭐ names the EMPTY bound the arm cannot refuse, at the bound that is empty (#18278)', () => {
173+
it('⭐ names the EMPTY bound the arm cannot refuse, at the bound that is empty', () => {
174174
// The premise, asserted rather than assumed: the tuple arm judges arity and
175175
// bound TYPE, never a bound's VALUE, so this window is ACCEPTED at the
176176
// schema door and refused PAST it — the residue

‎packages/spec/src/data/analytics-query-window-integer.test.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ const ACCEPTED: ReadonlyArray<[string, Record<string, unknown>]> = [
6767
];
6868

6969
for (const [name, schema, base] of DOORS) {
70-
describe(`[#21365] ${name} — the window is a non-negative integer`, () => {
70+
describe(`${name} — the window is a non-negative integer`, () => {
7171
for (const [label, window, key, code] of REFUSED) {
7272
it(`refuses ${label} at \`${key}\``, () => {
7373
const r = schema.safeParse({ ...base, ...window });
@@ -88,7 +88,7 @@ for (const [name, schema, base] of DOORS) {
8888
});
8989
}
9090

91-
describe('[#21365] the dataset selection holds the query\'s own declarations, not a copy', () => {
91+
describe('the dataset selection holds the query\'s own declarations, not a copy', () => {
9292
it('`limit` and `offset` on DatasetSelectionSchema are the AnalyticsQuerySchema instances', () => {
9393
expect(DatasetSelectionSchema.shape.limit).toBe(AnalyticsQuerySchema.shape.limit);
9494
expect(DatasetSelectionSchema.shape.offset).toBe(AnalyticsQuerySchema.shape.offset);

‎packages/spec/src/data/analytics-strictness-batchd.test.ts‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ const QUERY = { cube: 'batchd_probe', measures: ['count'] } as const;
8080
// ===========================================================================
8181
// 1. The doors — a parse must exist, or none of the rest means anything
8282
// ===========================================================================
83-
describe('#4001 batch D — the doors the cube family is reachable through', () => {
83+
describe('batch D, unknown keys refused — the doors the cube family is reachable through', () => {
8484
it('`defineCube()` is a real parse door — it throws on a malformed config', () => {
8585
expect(() => defineCube({ ...CUBE, notACubeKey: 1 } as never)).toThrow(/notACubeKey/);
8686
});
@@ -90,7 +90,7 @@ describe('#4001 batch D — the doors the cube family is reachable through', ()
9090
expect(reject(ObjectStackDefinitionSchema, stack)).toContain('publik');
9191
});
9292

93-
it('[#10194] `analytics_cube` now resolves the SAME schema at the saveMetaItem door', () => {
93+
it('`analytics_cube` now resolves the SAME schema at the saveMetaItem door', () => {
9494
// This pin used to assert the opposite — `getMetadataTypeSchema` answering
9595
// `undefined` — and its comment demanded that the ADR-0010 envelope
9696
// 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', ()
128128
// ===========================================================================
129129
// 2. Every closed site, at its own path, through its real carrier
130130
// ===========================================================================
131-
describe('#4001 batch D — closed sites reject unknown keys where they live', () => {
131+
describe('batch D — closed sites reject unknown keys where they live', () => {
132132
it('`Cube` — the top-level cube shape', () => {
133133
expect(reject(CubeSchema, { ...CUBE, publik: true })).toContain('publik');
134134
});
@@ -245,7 +245,7 @@ describe('#4001 batch D — closed sites reject unknown keys where they live', (
245245
// ===========================================================================
246246
// 3. The curation — each alias anchored to the declaration that makes it true
247247
// ===========================================================================
248-
describe('#4001 batch D — alias claims are true of the surfaces they point at', () => {
248+
describe('batch D, unknown keys refused — alias claims are true of the surfaces they point at', () => {
249249
it('`title` → `label` on Metric/Dimension, and `label` → `title` on Cube: each spelling is CORRECT on the other surface', () => {
250250
// The claims are structural: CubeSchema declares `title`, Metric/Dimension
251251
// 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'
267267
expect(reject(AnalyticsQuerySchema, { ...QUERY, orderBy: { stage: 'asc' } })).toContain('order');
268268
});
269269

270-
it('`filters` gets the wrong-layer prescription (`where`), matching the dispatcher\'s #3878 bespoke hint', () => {
270+
it('`filters` gets the wrong-layer prescription (`where`), matching the dispatcher\'s bespoke hint at the /analytics entry', () => {
271271
const issues = reject(AnalyticsQuerySchema, { ...QUERY, filters: { is_active: true } });
272272
expect(issues).toContain('where');
273273
});
@@ -285,7 +285,7 @@ describe('#4001 batch D — alias claims are true of the surfaces they point at'
285285
// ===========================================================================
286286
// 4. The REST wrapper still composes — strictness rides `.extend()` correctly
287287
// ===========================================================================
288-
describe('#4001 batch D — the strict base does not break the request wrapper', () => {
288+
describe('batch D — the strict base does not break the request wrapper', () => {
289289
it('a valid request body still parses through `AnalyticsQueryRequestSchema`', () => {
290290
accept(AnalyticsQueryRequestSchema, {
291291
...QUERY,
@@ -294,7 +294,7 @@ describe('#4001 batch D — the strict base does not break the request wrapper',
294294
});
295295
});
296296

297-
it('the #3878 tombstones still fire — `query` and `format` carry their migration text', () => {
297+
it('the retired-envelope tombstones still fire — `query` and `format` carry their migration text', () => {
298298
expect(reject(AnalyticsQueryRequestSchema, { ...QUERY, query: { measures: ['count'] } })).toContain('was removed from AnalyticsQueryRequest');
299299
expect(reject(AnalyticsQueryRequestSchema, { ...QUERY, format: 'csv' })).toContain('was removed from AnalyticsQueryRequest');
300300
});
@@ -303,8 +303,8 @@ describe('#4001 batch D — the strict base does not break the request wrapper',
303303
// ===========================================================================
304304
// 5. The shapes this batch deliberately did NOT close, with the reason
305305
// ===========================================================================
306-
describe('#4001 batch D — deliberate non-closures (re-verdicts, not omissions)', () => {
307-
it('`LocationValueSchema` / `AddressSchema` are CLOSED since #13802 — the batch-D `open` verdict was overruled', () => {
306+
describe('batch D, unknown keys refused — deliberate non-closures (re-verdicts, not omissions)', () => {
307+
it('`LocationValueSchema` / `AddressSchema` are CLOSED now — the batch-D `open` verdict was overruled', () => {
308308
// Batch D pinned these two as tolerant ("a phone's geolocation payload
309309
// carries `heading`/`speed`; a geocoder's address carries `district`") and
310310
// said the day the line went red, the decision would have been made

‎packages/spec/src/data/analytics.test.ts‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ describe('TimeUpdateInterval', () => {
6666
expect(TimeUpdateInterval.options).toEqual(DateGranularity.options);
6767
});
6868

69-
it('refuses each retired sub-day interval with the retirement prescription (#17296)', () => {
69+
it('refuses each retired sub-day interval with the retirement prescription', () => {
7070
// COST DIRECTION. The cheap narrowing is the enum alone: delete three
7171
// members and let zod answer its stock "invalid option". That parses
7272
// identically and tells an upgrading author nothing, so what is pinned
@@ -147,7 +147,7 @@ describe('MetricSchema', () => {
147147
// `expect(metric.filters).toHaveLength(1)`). The pin flips: the refusal must
148148
// carry the prescription — the fully-qualified key, the removal, and the
149149
// migration channel — not merely throw.
150-
it('rejects the removed `filters` key with the retirement prescription (#10414)', () => {
150+
it('rejects the removed `filters` key with the retirement prescription', () => {
151151
expect(() => MetricSchema.parse({
152152
label: 'Average Order Value',
153153
type: 'avg',
@@ -163,7 +163,7 @@ describe('MetricSchema', () => {
163163
// refused, the key-equal one included, and the refusal carries the
164164
// prescription. The full door-by-door pin lives in
165165
// `cube-member-inner-name-retirement.test.ts`.
166-
it('refuses the retired inner `name` with the prescription, whatever its value (#20300)', () => {
166+
it('refuses the retired inner `name` with the prescription, whatever its value', () => {
167167
for (const name of ['total_revenue', 'TotalRevenue', '']) {
168168
expect(() => MetricSchema.parse({ name, label: 'Total Revenue', type: 'sum', sql: 'amount' }), name)
169169
.toThrow(/`measures\.<metric>\.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', () => {
237237

238238
// #20300 — the same flip as the metric's (see that block): the snake_case
239239
// check on the inner `name` pinned a value nothing read.
240-
it('refuses the retired inner `name` with the prescription, whatever its value (#20300)', () => {
240+
it('refuses the retired inner `name` with the prescription, whatever its value', () => {
241241
for (const name of ['product_category', 'ProductCategory']) {
242242
expect(() => DimensionSchema.parse({ name, label: 'Product Category', type: 'string', sql: 'category' }), name)
243243
.toThrow(/`dimensions\.<dimension>\.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', () => {
311311
* shape). The conversion is `retiredFromLoadPath`, so the AUTHORING funnel still
312312
* teaches the tombstone; the data-at-rest seams pin `includeRetired: true`.
313313
*/
314-
describe('a persisted cube heals at the door (#18612, ADR-0087 D2)', () => {
314+
describe('a persisted cube heals at the door — the retired join `sql` / `relationship` are stripped (ADR-0087 D2)', () => {
315315
/** What `CubeSchema.parse` itself emitted before this retirement. */
316316
const persisted = () => ({
317317
analyticsCubes: [{
@@ -532,7 +532,7 @@ describe('AnalyticsQuerySchema', () => {
532532
}
533533
});
534534

535-
it('should NOT default timezone -- absence means the engine resolves it (#4538)', () => {
535+
it('should NOT default timezone -- absence means the engine resolves it', () => {
536536
const query = AnalyticsQuerySchema.parse({
537537
measures: ['orders.count'],
538538
});

‎packages/spec/src/data/api-derivation.test.ts‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313
} from './api-derivation';
1414
import { ApiMethod, API_OPERATION_ORDER, LEGACY_API_METHODS } from './object.zod';
1515

16-
describe('api-derivation (#3391)', () => {
16+
describe('api-derivation — one table resolves the effective operations from six primitives', () => {
1717
describe('three-state mode', () => {
1818
it('undefined apiMethods → unrestricted', () => {
1919
const eff = resolveEffectiveApiMethods({});
@@ -29,7 +29,7 @@ describe('api-derivation (#3391)', () => {
2929
expect(isApiOperationAllowed(eff, 'bulk')).toBe(true);
3030
});
3131

32-
it('empty array → deny-all (flipped semantics, #3391)', () => {
32+
it('empty array → deny-all (flipped semantics)', () => {
3333
const eff = resolveEffectiveApiMethods({ apiMethods: [] });
3434
expect(eff.mode).toBe('deny-all');
3535
for (const p of API_PRIMITIVES) expect(isApiOperationAllowed(eff, p)).toBe(false);
@@ -95,7 +95,7 @@ describe('api-derivation (#3391)', () => {
9595
expect(isApiOperationAllowed(resolveEffectiveApiMethods({ apiMethods: ['get'], trackHistory: false }), 'history')).toBe(false);
9696
});
9797

98-
it('restore/purge never derive (trash flag retired, #2377)', () => {
98+
it('restore/purge never derive (trash flag retired)', () => {
9999
const eff = resolveEffectiveApiMethods({ apiMethods: ['get', 'list', 'create', 'update', 'delete'] });
100100
expect(isApiOperationAllowed(eff, 'restore')).toBe(false);
101101
expect(isApiOperationAllowed(eff, 'purge')).toBe(false);
@@ -133,7 +133,7 @@ describe('api-derivation (#3391)', () => {
133133
});
134134
});
135135

136-
describe('legacy values are ignored — strip semantics (#3543)', () => {
136+
describe('legacy values are ignored — strip semantics', () => {
137137
it('a whitelist of ONLY legacy values resolves to deny-all', () => {
138138
const eff = resolveEffectiveApiMethods({ apiMethods: ['import'] });
139139
expect(eff.mode).toBe('deny-all');
@@ -159,7 +159,7 @@ describe('api-derivation (#3391)', () => {
159159
});
160160
});
161161

162-
describe('present-but-unreadable policy fails CLOSED (#3545)', () => {
162+
describe('present-but-unreadable policy fails CLOSED', () => {
163163
it('a non-array apiMethods resolves to deny-all, not unrestricted', () => {
164164
const eff = resolveEffectiveApiMethods({ apiMethods: 'get,list' as unknown as string[] });
165165
expect(eff.mode).toBe('deny-all');
@@ -283,7 +283,7 @@ describe('api-derivation (#3391)', () => {
283283
expect(overlap).toEqual([]);
284284
});
285285

286-
describe('vocabulary split (#3543)', () => {
286+
describe('vocabulary split — authors write six primitives, the wire speaks operations', () => {
287287
it('the authored enum is exactly the six primitives', () => {
288288
expect(ApiMethod.options).toEqual([...API_PRIMITIVES]);
289289
});

‎packages/spec/src/data/api-methods-batch-conformance.test.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ const SINGLE_RECORD_WRITE_ONLY: Record<string, string> = {
190190
"ADR-0092 D2's identity write guard admits). No console surface multi-selects " +
191191
'API keys — the grid renders no checkbox column because the object grants no ' +
192192
'delete affordance — and a promoted bulk revoke would fan out per row through ' +
193-
'the action runner rather than hitting /batch (#7802).',
193+
'the action runner rather than hitting /batch.',
194194
// #15873 — maintainer ruling 2026-09-07 (decision batch #64, option (a),
195195
// verbatim 「同意」): the data door admits `update` so an administrator can set
196196
// the four platform-owned columns (`require_mfa`, `parent_organization_id`,
@@ -218,12 +218,12 @@ const SINGLE_RECORD_WRITE_ONLY: Record<string, string> = {
218218
// both stand.
219219
sys_organization:
220220
'Administrators set the platform-owned columns through single-record PATCH ' +
221-
'and the derived update-mode import door (#15873 ruled `update`; both are ' +
221+
'and the derived update-mode import door (a ruling grants `update`; both are ' +
222222
'column-clamped per row by ADR-0092 D2). `bulk` — /batch and the *Many ' +
223223
'routes — is not granted: no console surface multi-selects organizations ' +
224224
'(the list view declares no bulk actions and the object grants no delete ' +
225225
'affordance), and a promoted bulk edit would fan out per row through the ' +
226-
'action runner rather than hitting /batch (#7802).',
226+
'action runner rather than hitting /batch.',
227227
};
228228

229229
/** Every `*.object.ts` under `packages/`, skipping build output and deps. */
@@ -283,7 +283,7 @@ function collectWhitelists(): Whitelist[] {
283283

284284
const WHITELISTS = collectWhitelists();
285285

286-
describe('apiMethods conformance — single-record writes imply batch (#3026)', () => {
286+
describe('apiMethods conformance — single-record writes imply batch', () => {
287287
it('scans a plausible number of declarations (guards a silently empty sweep)', () => {
288288
// A scan that matches nothing passes every assertion below vacuously — the
289289
// exact failure mode this file exists to prevent. Pin a floor instead.

0 commit comments

Comments
 (0)