Skip to content

Commit 612375d

Browse files
committed
test(spec): the third ui/ file group's test titles state each cited decision in words instead of a tracker number (stage 22)
Stage 22 of the spec lane's share of the runtime-string burn-down: the test strings shipped under packages/spec/src, the third name-ordered ui/ group (dataset-filter-nested-relation-list.test.ts through view-inline-object-binding.test.ts). 94 literals in 29 files (89 test titles and 5 declared strings: four expect messages and one door name that becomes a describe title) lose 100 tracker ids: 24 literals now state the cited decision in words, 22 get their subject back in words, and 48 drop a number the title already explains. Two needles stay: notification.test.ts:123 slices the source tombstone at its '// [#4610]' anchor, and strictness-batch14.test.ts:395 asserts that two source modules cite '#5015'. Text only: one line per literal, no assertion, identifier, test count, code comment or file name changes. Claude-Session: https://claude.ai/code/session_01T9u38rswFp5Rw8DswRUReJ Co-authored-by: Claude <noreply@anthropic.com>
1 parent be97cf3 commit 612375d

29 files changed

Lines changed: 94 additions & 94 deletions

‎packages/spec/src/ui/dataset-filter-nested-relation-list.test.ts‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ const REFUSED: ReadonlyArray<readonly [
113113
// §1 Both carriers refuse, at the list's own path
114114
// ---------------------------------------------------------------------------
115115

116-
describe('#20080 §1 — both analytics carriers refuse a list inside a nested relation', () => {
116+
describe('§1 — both analytics carriers refuse a list inside a nested relation, at save', () => {
117117
it.each(REFUSED)('DatasetSchema.filter refuses %s', (_label, filter, issuePath) => {
118118
const issue = issueAt(DatasetSchema.safeParse(withScope(filter)), `filter.${issuePath}`);
119119
expect(issue.message).toMatch(/requires a single comparable value, but received an array/);
@@ -145,7 +145,7 @@ describe('#20080 §1 — both analytics carriers refuse a list inside a nested r
145145
// §2 The carrier prints the analytics door's sentence
146146
// ---------------------------------------------------------------------------
147147

148-
describe('#20080 §2 — the carrier refusal is the analytics door\'s sentence', () => {
148+
describe('§2 — the carrier refusal is the analytics door\'s sentence', () => {
149149
it.each(REFUSED)('%s', (_label, filter, issuePath, field, list, eq, holder) => {
150150
const door = analyticsDoorRefusal(field, eq ? { $eq: list } : list, holder);
151151
// The door's refusal is the ADR-0112 class-1 envelope the face throws.
@@ -175,7 +175,7 @@ describe('#20080 §2 — the carrier refusal is the analytics door\'s sentence',
175175
// §3 A list the shared schema already refuses is refused once, not twice
176176
// ---------------------------------------------------------------------------
177177

178-
describe('#20080 §3 — outside a nested relation the shared schema answers, once', () => {
178+
describe('§3 — outside a nested relation the shared schema answers, once', () => {
179179
it.each([
180180
['top level, implicit', { region: ['a'] }, 'region', /^The implicit-equality comparand on field "region"/],
181181
['top level, $eq', { region: { $eq: ['a'] } }, 'region.$eq', /^Operator "\$eq" on field "region"/],
@@ -192,7 +192,7 @@ describe('#20080 §3 — outside a nested relation the shared schema answers, on
192192
// §4 CONTROLS — accepted on both carriers, and kept
193193
// ---------------------------------------------------------------------------
194194

195-
describe('#20080 §4 — what a nested relation may still carry', () => {
195+
describe('§4 — what a nested relation may still carry', () => {
196196
const day = new Date('2026-07-01T00:00:00.000Z');
197197
it.each([
198198
['a scalar', { account: { region: 'a' } }],
@@ -217,7 +217,7 @@ describe('#20080 §4 — what a nested relation may still carry', () => {
217217
expect(measure.data!.filter).toEqual(filter);
218218
});
219219

220-
it('[#20116] $ne carrying a list inside a relation is refused on both carriers, in the door\'s $ne sentence', () => {
220+
it('$ne carrying a list inside a relation is refused on both carriers, in the door\'s $ne sentence', () => {
221221
// This row sat in the table above as "not yet at this save door (#20116)".
222222
// #20116 routes every slot this walk reaches through the query faces'
223223
// verdict, so the shape the analytics door refuses on chart is refused here.

‎packages/spec/src/ui/door-reachability.testkit.test.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const defOf = (s: unknown): unknown => (s as { _zod?: { def?: unknown } })?._zod
5858
// derivation or a coincidence. A zod upgrade that changes `clone()` semantics
5959
// changes the bridge's meaning, and that must be LOUD rather than silent.
6060
// ============================================================================
61-
describe('#5056 premise — which zod builders share the `_zod.def` object', () => {
61+
describe('the derived-clone bridge premise — which zod builders share the `_zod.def` object', () => {
6262
it('`.describe()` shares the def of the instance it was called on', () => {
6363
// THE mechanism behind #5056. `clone(inst)` without an explicit def reuses
6464
// `inst._zod.def`, so a described clone is def-IDENTICAL to its receiver.
@@ -104,7 +104,7 @@ describe('#5056 premise — which zod builders share the `_zod.def` object', ()
104104
// ============================================================================
105105
// 2. The three controls, on the instrument itself.
106106
// ============================================================================
107-
describe('#5056 controls — the walker finds doors, and only real ones', () => {
107+
describe('controls — the walker finds doors, and only real ones', () => {
108108
it('positive: live authoring roots resolve, and the graph is really walked', () => {
109109
const { verdict, nodeCount, rootCount } = measureDoors();
110110
expect(rootCount, 'every metadata type plus ObjectStackSchema').toBeGreaterThan(20);
@@ -153,7 +153,7 @@ describe('#5056 controls — the walker finds doors, and only real ones', () =>
153153
// ============================================================================
154154
// 3. The #5056 regression boundary itself.
155155
// ============================================================================
156-
describe('#5056 regression — the any-one-shared-property bridge stays dead', () => {
156+
describe('regression — the any-one-shared-property bridge stays dead; a share of the shape decides', () => {
157157
it('a 2-of-19 shared-leaf shape shares leaves with the live graph but is NOT derived from it', () => {
158158
// The reverse verification, standing rather than one-shot.
159159
//
@@ -213,6 +213,6 @@ describe('#5056 regression — the any-one-shared-property bridge stays dead', (
213213
label: I18nLabelSchema.describe('Display label'),
214214
});
215215
expect(cloneOverlap(allSharedLeaves), '2 shared of 2 keys').toBe(1);
216-
expect(verdict(allSharedLeaves), 'the residual false-reachable case — see #5828').toBe('derived-clone');
216+
expect(verdict(allSharedLeaves), 'the residual false-reachable case — no threshold excludes it').toBe('derived-clone');
217217
});
218218
});

‎packages/spec/src/ui/expression-scope-app-root.pin.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ const sentenceContaining = (source: string, anchor: string): string => {
8181
/** Root tokens that are still true on these surfaces and must stay in place. */
8282
const SURVIVING_ROOTS = ['features', 'os.user'] as const;
8383

84-
describe('#17203 — no UI prose face advertises `app` as an expression-scope root', () => {
84+
describe('no UI prose face advertises `app` as an expression-scope root — the renderer no longer mounts it', () => {
8585
describe('published faces (read by authoring tools and republished into the reference docs)', () => {
8686
it('`PageComponentSchema.visibleWhen`.describe() does not name `app` among the mounted roots', () => {
8787
// ⚠️ NOT `.shape` — ADR-0089 D3a made this schema a `.strict().transform(…)`

‎packages/spec/src/ui/form-layout-inline-grid-retired.test.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const DOORS: readonly Door[] = [
5858
layoutPath: ['layout'],
5959
},
6060
{
61-
name: "ComponentPropsMap['object-form'] (the #5068 props gate's dispatch)",
61+
name: "ComponentPropsMap['object-form'] (the props gate's dispatch)",
6262
parse: (layout) => ComponentPropsMap['object-form'].safeParse({ objectName: 'crm_lead', layout }),
6363
layoutPath: ['layout'],
6464
},
@@ -86,7 +86,7 @@ const DOORS: readonly Door[] = [
8686
},
8787
];
8888

89-
describe('form `layout` — the retired arms are refused with the prescription (#20221)', () => {
89+
describe('form `layout` — the retired arms are refused with the prescription', () => {
9090
for (const door of DOORS) {
9191
describe(door.name, () => {
9292
it("'grid' → refused, prescribing 'vertical' and naming `columns` for multi-column", () => {
@@ -138,7 +138,7 @@ describe('form `layout` — the retired arms are refused with the prescription (
138138
});
139139
});
140140

141-
describe(`D2 conversion \`${CONVERSION_ID}\` (#20221)`, () => {
141+
describe(`D2 conversion \`${CONVERSION_ID}\``, () => {
142142
const conversion = CONVERSIONS_BY_MAJOR[18]!.find((c) => c.id === CONVERSION_ID);
143143

144144
it('is registered under protocol 18 and retired from the load path', () => {
@@ -217,7 +217,7 @@ describe(`D2 conversion \`${CONVERSION_ID}\` (#20221)`, () => {
217217
});
218218
});
219219

220-
describe('D3: the family entry and the chain step are registered (#20221)', () => {
220+
describe('D3: the family entry and the chain step are registered', () => {
221221
const step = MIGRATIONS_BY_MAJOR[18]!;
222222

223223
it(`the protocol-18 step wires \`${CONVERSION_ID}\``, () => {

‎packages/spec/src/ui/form-option-enum-derive.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ describe('ruling 乙 item 1, on real spec enums — each case with a firing and
284284
});
285285
});
286286

287-
describe('a spellable enum row with a labelled inline list (`object.sharingModel`, the #19331 shape)', () => {
287+
describe('a spellable enum row with a labelled inline list (`object.sharingModel`, as its form row writes it)', () => {
288288
const members = servedEnum('object', 'sharingModel');
289289
const LABELS: Record<string, string> = {
290290
private: 'Private — owner only',

‎packages/spec/src/ui/i18n-label-resolver.test.ts‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ const PARITY_VECTORS: readonly ParityVector[] = [
278278
},
279279
];
280280

281-
describe('resolveI18nLabel — rule parity with objectui pickLocalized (#6765 / #6761 ruling B)', () => {
281+
describe('resolveI18nLabel — rule parity with objectui pickLocalized (ruled: one shared resolver, on the server)', () => {
282282
describe('the vector table really is the reference\'s behaviour', () => {
283283
it.each(PARITY_VECTORS)('$limb', ({ label, locale, pick }) => {
284284
// Asserted against the copied reference FIRST. If this row is wrong, the
@@ -326,7 +326,7 @@ describe('resolveI18nLabel — the producer-facing return shape', () => {
326326
expect(resolveI18nLabel({ en: '' }, 'en')).toBe('');
327327
});
328328

329-
it('composes with `??` into the producer call shape #6761 needs', () => {
329+
it('composes with `??` into the producer call shape the dataset compiler needs', () => {
330330
// `dataset-compiler.ts:374/406` today: `typeof d.label === 'string' ? d.label : d.name`,
331331
// which publishes the MACHINE NAME as a display title for a map label.
332332
const dimension = { name: 'owner', label: { en: 'Owner', 'zh-CN': '负责人' } as I18nLabel };
@@ -337,7 +337,7 @@ describe('resolveI18nLabel — the producer-facing return shape', () => {
337337
});
338338
});
339339

340-
describe('resolveI18nLabel — the rule departures converged with objectui#3907; one departure survives', () => {
340+
describe('resolveI18nLabel — the rule departures converged once objectui read only own, string-valued entries; one departure survives', () => {
341341
// Before objectui#3907 (landed as objectui PR #4359) this module's rule
342342
// documented two DELIBERATE narrowings of the reference. #4359 landed the
343343
// same two guards upstream, so the copied reference now answers identically
@@ -372,7 +372,7 @@ describe('resolveI18nLabel — the rule departures converged with objectui#3907;
372372
expect(resolveI18nLabel(offSpec, 'zh-CN')).toBe('Owner');
373373
});
374374

375-
it('refuses an off-contract scalar rather than stringifying it — the one departure objectui#3907 did NOT touch', () => {
375+
it('refuses an off-contract scalar rather than stringifying it — the one departure the objectui map-limb fix did NOT touch', () => {
376376
// `pickLocalized` accepts `unknown` and stringifies numbers/booleans
377377
// (`pickLocalized(42, 'en')` is `'42'`). This resolver's parameter is the
378378
// declared `I18nLabel`, so the shapes below are type errors — the
@@ -388,7 +388,7 @@ describe('resolveI18nLabel — the rule departures converged with objectui#3907;
388388
});
389389
});
390390

391-
describe('resolveI18nLabel — the type signature refuses the calls that caused #6761', () => {
391+
describe('resolveI18nLabel — the type signature refuses the calls behind the dropped dataset label', () => {
392392
// Reverse verification at the type level. `check:test-typecheck` compiles this
393393
// file (packages/spec/tsconfig.test.json), so each directive below is a REAL
394394
// check: delete the argument it guards and tsc goes red on the unused

‎packages/spec/src/ui/i18n.test.ts‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ describe('I18nLabelSchema', () => {
9696
// runtime to the same line. Each rejection pin asserts the named error
9797
// content (issue code + message), not just parse failure.
9898

99-
it('rejects a lone `key` — the enforcement hole #10492 closes', () => {
99+
it('rejects a lone `key`, which used to parse as a locale map', () => {
100100
const r = I18nLabelSchema.safeParse({ key: 'common.save' });
101101
expect(r.success).toBe(false);
102102
const issues = JSON.stringify(r.error?.issues);
@@ -164,7 +164,7 @@ describe('I18nLabelSchema', () => {
164164
expect(
165165
description,
166166
'no key is generated for any label — a plain string is translatable only where a resolver + '
167-
+ 'translation slot exist for its surface (#5377)',
167+
+ 'translation slot exist for its surface',
168168
).not.toMatch(/auto-generated/i);
169169
});
170170
});
@@ -186,7 +186,7 @@ describe('AriaPropsSchema', () => {
186186
expect(result.ariaLabel).toBe('Close dialog');
187187
});
188188

189-
it('accepts ariaLabel as an inline locale map — it rides `I18nLabelSchema` (#5728)', () => {
189+
it('accepts ariaLabel as an inline locale map — it rides `I18nLabelSchema`', () => {
190190
const result = AriaPropsSchema.parse({ ariaLabel: { en: 'Close dialog', 'zh-CN': '关闭对话框' } });
191191
expect(result.ariaLabel).toEqual({ en: 'Close dialog', 'zh-CN': '关闭对话框' });
192192
});
@@ -200,7 +200,7 @@ describe('AriaPropsSchema', () => {
200200
})).toThrow();
201201
});
202202

203-
it('does not promise a generated translation key for `ariaLabel` either (#5377)', () => {
203+
it('does not promise a generated translation key for `ariaLabel` either', () => {
204204
// The reporter's second surviving point. `ariaLabel` overrides the shared
205205
// describe, so it never carried the "auto-generated" sentence verbatim —
206206
// but it inherited the assumption, and there is no bundle slot addressing
@@ -271,7 +271,7 @@ function reject(schema: { safeParse: (v: unknown) => { success: boolean; error?:
271271
return JSON.stringify(r.error?.issues ?? []);
272272
}
273273

274-
describe('#4001 批 16 — AriaPropsSchema is closed (the door is real)', () => {
274+
describe('批 16 — AriaPropsSchema is closed (the door is real)', () => {
275275
it('the controls parse — this suite fails closed, not by rejecting everything', () => {
276276
expect(AriaPropsSchema.safeParse({}).success).toBe(true);
277277
expect(AriaPropsSchema.safeParse({ ariaLabel: 'Close dialog' }).success).toBe(true);
@@ -371,7 +371,7 @@ describe('#4001 批 16 — AriaPropsSchema is closed (the door is real)', () =>
371371
expect(reject(objectuiAria as never, { ariaLabel: 'x', bogus: 1 })).toContain('these ARIA attributes');
372372
});
373373

374-
it('has no `.merge()` riders left at all — the four it had were retired at #4988', async () => {
374+
it('has no `.merge()` riders left at all — the four it had were retired with the interaction-config family', async () => {
375375
// REPLACED WHOLESALE at #4988, not re-spelled. This test used to name five
376376
// shapes in `animation` / `dnd` / `keyboard` / `touch` and assert each still
377377
// accepted an undeclared key, because `X.merge(AriaPropsSchema.partial())`

‎packages/spec/src/ui/inline-action-type.test.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ const legacyTo: InlineAction = { type: 'url', to: '/pricing' };
5151
const scalar: InlineAction = 42;
5252
void [fromUnknown, scalar];
5353

54-
describe('[#19920] InlineAction is an inline action body, not unknown', () => {
54+
describe('InlineAction is an inline action body, not unknown', () => {
5555
it.each([
5656
['a url action', urlAction],
5757
['an api action with a static payload', apiAction],

‎packages/spec/src/ui/inline-action.test.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ describe('InlineActionSchema — identity is optional, unlike a registered actio
125125
* same-name union. `bodyExtra` is that key — already declared on `ActionSchema`
126126
* for `type:'api'` bodies, now picked onto the inline shape.
127127
*/
128-
describe('InlineActionSchema — `bodyExtra` is the payload key, `params` is not (#5777)', () => {
128+
describe('InlineActionSchema — `bodyExtra` is the payload key, `params` is not', () => {
129129
it('accepts the showcase submit button verbatim, `{{page.<var>}}` tokens included', () => {
130130
// examples/app-showcase/src/ui/pages/contact-form.page.ts — the site the
131131
// #5068 gate reported. Values are template tokens, not literals: the
@@ -222,7 +222,7 @@ describe('InlineActionSchema — `bodyExtra` is the payload key, `params` is not
222222
* regression that drops either arm is a wrong instruction again, and the bare
223223
* "expected array, received object" would keep a `toThrow()`-shaped test green.
224224
*/
225-
describe('object-form `params` prescribes per action type (#6828)', () => {
225+
describe('object-form `params` prescribes per action type — its url meaning is retired, not re-keyed', () => {
226226
/** The `params` issue a parse produced, or a readable failure if it produced none. */
227227
const paramsIssue = (r: { success: boolean; error?: z.ZodError }) => {
228228
expect(r.success).toBe(false);
@@ -380,7 +380,7 @@ describe('element:button declares its action', () => {
380380
expect(r.success).toBe(false);
381381
});
382382

383-
it('carries an api payload through to parse output (#5777, end to end)', () => {
383+
it('carries an api payload through to parse output (end to end)', () => {
384384
// The #5068 gate parses `properties` through this schema, so this is the
385385
// exact call whose `component-props-invalid` finding the showcase page
386386
// produced before the ruling.

‎packages/spec/src/ui/interaction-config-retirement.test.ts‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ import {
5757
// conditional-type pin in this package was a no-op until #5286 (tsconfig excluded
5858
// `**/*.test.ts`; vitest never enables `typecheck`), so the compiler-API walk
5959
// with anti-vacuity guards is the load-bearing instrument.
60-
describe('[#4988] ui/ interaction config family retirement', () => {
60+
describe('ui/ interaction config family retirement — renderer behaviour, not authored metadata', () => {
6161
/** Every name the five modules exported (32 schema/enum consts + 32 types). */
6262
const RETIRED_NAMES = [
6363
// touch.zod.ts
@@ -145,7 +145,7 @@ describe('[#4988] ui/ interaction config family retirement', () => {
145145
// ── ABSENCE (every entry, not just ./ui) ──────────────────────────────
146146
for (const name of RETIRED_NAMES) {
147147
const holders = holdersOf(name);
148-
expect(holders, `${name} must have zero holders after #4988`).toEqual([]);
148+
expect(holders, `${name} must have zero holders after the family retirement`).toEqual([]);
149149
}
150150

151151
// ── SURVIVAL (on ./ui, where they live) ───────────────────────────────
@@ -186,7 +186,7 @@ describe('[#4988] ui/ interaction config family retirement', () => {
186186
}
187187
};
188188
walk(srcRoot);
189-
expect(importers, 'a resurrected import means the retirement is being undone — re-read #4988').toEqual([]);
189+
expect(importers, 'a resurrected import means the retirement is being undone — these are renderer behaviour, not authored metadata').toEqual([]);
190190
});
191191

192192
it('runtime namespace agrees with the compiler view', async () => {
@@ -200,7 +200,7 @@ describe('[#4988] ui/ interaction config family retirement', () => {
200200
}
201201
});
202202

203-
it('the bare `ConflictResolution` name is now published by NOBODY — #4738 left it to ./ui alone', async () => {
203+
it('the bare `ConflictResolution` name is now published by NOBODY — the connector-side rename left it to ./ui alone', async () => {
204204
// #4738 renamed the connector-side enum to `ConnectorConflictResolution`
205205
// BECAUSE `ui/offline.zod.ts` owned the bare name. That owner is gone, so
206206
// the bare name is unowned rather than re-homed: the rename is not undone

0 commit comments

Comments
 (0)