diff --git a/packages/spec/src/ui/dataset-filter-nested-relation-list.test.ts b/packages/spec/src/ui/dataset-filter-nested-relation-list.test.ts index 1a39066a23b..ab2aee11a82 100644 --- a/packages/spec/src/ui/dataset-filter-nested-relation-list.test.ts +++ b/packages/spec/src/ui/dataset-filter-nested-relation-list.test.ts @@ -113,7 +113,7 @@ const REFUSED: ReadonlyArray { +describe('§1 — both analytics carriers refuse a list inside a nested relation, at save', () => { it.each(REFUSED)('DatasetSchema.filter refuses %s', (_label, filter, issuePath) => { const issue = issueAt(DatasetSchema.safeParse(withScope(filter)), `filter.${issuePath}`); 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 // §2 The carrier prints the analytics door's sentence // --------------------------------------------------------------------------- -describe('#20080 §2 — the carrier refusal is the analytics door\'s sentence', () => { +describe('§2 — the carrier refusal is the analytics door\'s sentence', () => { it.each(REFUSED)('%s', (_label, filter, issuePath, field, list, eq, holder) => { const door = analyticsDoorRefusal(field, eq ? { $eq: list } : list, holder); // 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', // §3 A list the shared schema already refuses is refused once, not twice // --------------------------------------------------------------------------- -describe('#20080 §3 — outside a nested relation the shared schema answers, once', () => { +describe('§3 — outside a nested relation the shared schema answers, once', () => { it.each([ ['top level, implicit', { region: ['a'] }, 'region', /^The implicit-equality comparand on field "region"/], ['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 // §4 CONTROLS — accepted on both carriers, and kept // --------------------------------------------------------------------------- -describe('#20080 §4 — what a nested relation may still carry', () => { +describe('§4 — what a nested relation may still carry', () => { const day = new Date('2026-07-01T00:00:00.000Z'); it.each([ ['a scalar', { account: { region: 'a' } }], @@ -217,7 +217,7 @@ describe('#20080 §4 — what a nested relation may still carry', () => { expect(measure.data!.filter).toEqual(filter); }); - it('[#20116] $ne carrying a list inside a relation is refused on both carriers, in the door\'s $ne sentence', () => { + it('$ne carrying a list inside a relation is refused on both carriers, in the door\'s $ne sentence', () => { // This row sat in the table above as "not yet at this save door (#20116)". // #20116 routes every slot this walk reaches through the query faces' // verdict, so the shape the analytics door refuses on chart is refused here. diff --git a/packages/spec/src/ui/door-reachability.testkit.test.ts b/packages/spec/src/ui/door-reachability.testkit.test.ts index c70f95b8d02..845f9f7e75f 100644 --- a/packages/spec/src/ui/door-reachability.testkit.test.ts +++ b/packages/spec/src/ui/door-reachability.testkit.test.ts @@ -58,7 +58,7 @@ const defOf = (s: unknown): unknown => (s as { _zod?: { def?: unknown } })?._zod // derivation or a coincidence. A zod upgrade that changes `clone()` semantics // changes the bridge's meaning, and that must be LOUD rather than silent. // ============================================================================ -describe('#5056 premise — which zod builders share the `_zod.def` object', () => { +describe('the derived-clone bridge premise — which zod builders share the `_zod.def` object', () => { it('`.describe()` shares the def of the instance it was called on', () => { // THE mechanism behind #5056. `clone(inst)` without an explicit def reuses // `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', () // ============================================================================ // 2. The three controls, on the instrument itself. // ============================================================================ -describe('#5056 controls — the walker finds doors, and only real ones', () => { +describe('controls — the walker finds doors, and only real ones', () => { it('positive: live authoring roots resolve, and the graph is really walked', () => { const { verdict, nodeCount, rootCount } = measureDoors(); expect(rootCount, 'every metadata type plus ObjectStackSchema').toBeGreaterThan(20); @@ -153,7 +153,7 @@ describe('#5056 controls — the walker finds doors, and only real ones', () => // ============================================================================ // 3. The #5056 regression boundary itself. // ============================================================================ -describe('#5056 regression — the any-one-shared-property bridge stays dead', () => { +describe('regression — the any-one-shared-property bridge stays dead; a share of the shape decides', () => { it('a 2-of-19 shared-leaf shape shares leaves with the live graph but is NOT derived from it', () => { // The reverse verification, standing rather than one-shot. // @@ -213,6 +213,6 @@ describe('#5056 regression — the any-one-shared-property bridge stays dead', ( label: I18nLabelSchema.describe('Display label'), }); expect(cloneOverlap(allSharedLeaves), '2 shared of 2 keys').toBe(1); - expect(verdict(allSharedLeaves), 'the residual false-reachable case — see #5828').toBe('derived-clone'); + expect(verdict(allSharedLeaves), 'the residual false-reachable case — no threshold excludes it').toBe('derived-clone'); }); }); diff --git a/packages/spec/src/ui/expression-scope-app-root.pin.test.ts b/packages/spec/src/ui/expression-scope-app-root.pin.test.ts index 45854da1135..0448ed75206 100644 --- a/packages/spec/src/ui/expression-scope-app-root.pin.test.ts +++ b/packages/spec/src/ui/expression-scope-app-root.pin.test.ts @@ -81,7 +81,7 @@ const sentenceContaining = (source: string, anchor: string): string => { /** Root tokens that are still true on these surfaces and must stay in place. */ const SURVIVING_ROOTS = ['features', 'os.user'] as const; -describe('#17203 — no UI prose face advertises `app` as an expression-scope root', () => { +describe('no UI prose face advertises `app` as an expression-scope root — the renderer no longer mounts it', () => { describe('published faces (read by authoring tools and republished into the reference docs)', () => { it('`PageComponentSchema.visibleWhen`.describe() does not name `app` among the mounted roots', () => { // ⚠️ NOT `.shape` — ADR-0089 D3a made this schema a `.strict().transform(…)` diff --git a/packages/spec/src/ui/form-layout-inline-grid-retired.test.ts b/packages/spec/src/ui/form-layout-inline-grid-retired.test.ts index 1abe18b28ba..8fa0084ac73 100644 --- a/packages/spec/src/ui/form-layout-inline-grid-retired.test.ts +++ b/packages/spec/src/ui/form-layout-inline-grid-retired.test.ts @@ -58,7 +58,7 @@ const DOORS: readonly Door[] = [ layoutPath: ['layout'], }, { - name: "ComponentPropsMap['object-form'] (the #5068 props gate's dispatch)", + name: "ComponentPropsMap['object-form'] (the props gate's dispatch)", parse: (layout) => ComponentPropsMap['object-form'].safeParse({ objectName: 'crm_lead', layout }), layoutPath: ['layout'], }, @@ -86,7 +86,7 @@ const DOORS: readonly Door[] = [ }, ]; -describe('form `layout` — the retired arms are refused with the prescription (#20221)', () => { +describe('form `layout` — the retired arms are refused with the prescription', () => { for (const door of DOORS) { describe(door.name, () => { 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 ( }); }); -describe(`D2 conversion \`${CONVERSION_ID}\` (#20221)`, () => { +describe(`D2 conversion \`${CONVERSION_ID}\``, () => { const conversion = CONVERSIONS_BY_MAJOR[18]!.find((c) => c.id === CONVERSION_ID); it('is registered under protocol 18 and retired from the load path', () => { @@ -217,7 +217,7 @@ describe(`D2 conversion \`${CONVERSION_ID}\` (#20221)`, () => { }); }); -describe('D3: the family entry and the chain step are registered (#20221)', () => { +describe('D3: the family entry and the chain step are registered', () => { const step = MIGRATIONS_BY_MAJOR[18]!; it(`the protocol-18 step wires \`${CONVERSION_ID}\``, () => { diff --git a/packages/spec/src/ui/form-option-enum-derive.test.ts b/packages/spec/src/ui/form-option-enum-derive.test.ts index 967ec543c11..34d947210d8 100644 --- a/packages/spec/src/ui/form-option-enum-derive.test.ts +++ b/packages/spec/src/ui/form-option-enum-derive.test.ts @@ -284,7 +284,7 @@ describe('ruling 乙 item 1, on real spec enums — each case with a firing and }); }); - describe('a spellable enum row with a labelled inline list (`object.sharingModel`, the #19331 shape)', () => { + describe('a spellable enum row with a labelled inline list (`object.sharingModel`, as its form row writes it)', () => { const members = servedEnum('object', 'sharingModel'); const LABELS: Record = { private: 'Private — owner only', diff --git a/packages/spec/src/ui/i18n-label-resolver.test.ts b/packages/spec/src/ui/i18n-label-resolver.test.ts index 732864b9518..4a6ba751cc6 100644 --- a/packages/spec/src/ui/i18n-label-resolver.test.ts +++ b/packages/spec/src/ui/i18n-label-resolver.test.ts @@ -278,7 +278,7 @@ const PARITY_VECTORS: readonly ParityVector[] = [ }, ]; -describe('resolveI18nLabel — rule parity with objectui pickLocalized (#6765 / #6761 ruling B)', () => { +describe('resolveI18nLabel — rule parity with objectui pickLocalized (ruled: one shared resolver, on the server)', () => { describe('the vector table really is the reference\'s behaviour', () => { it.each(PARITY_VECTORS)('$limb', ({ label, locale, pick }) => { // Asserted against the copied reference FIRST. If this row is wrong, the @@ -326,7 +326,7 @@ describe('resolveI18nLabel — the producer-facing return shape', () => { expect(resolveI18nLabel({ en: '' }, 'en')).toBe(''); }); - it('composes with `??` into the producer call shape #6761 needs', () => { + it('composes with `??` into the producer call shape the dataset compiler needs', () => { // `dataset-compiler.ts:374/406` today: `typeof d.label === 'string' ? d.label : d.name`, // which publishes the MACHINE NAME as a display title for a map label. const dimension = { name: 'owner', label: { en: 'Owner', 'zh-CN': '负责人' } as I18nLabel }; @@ -337,7 +337,7 @@ describe('resolveI18nLabel — the producer-facing return shape', () => { }); }); -describe('resolveI18nLabel — the rule departures converged with objectui#3907; one departure survives', () => { +describe('resolveI18nLabel — the rule departures converged once objectui read only own, string-valued entries; one departure survives', () => { // Before objectui#3907 (landed as objectui PR #4359) this module's rule // documented two DELIBERATE narrowings of the reference. #4359 landed the // same two guards upstream, so the copied reference now answers identically @@ -372,7 +372,7 @@ describe('resolveI18nLabel — the rule departures converged with objectui#3907; expect(resolveI18nLabel(offSpec, 'zh-CN')).toBe('Owner'); }); - it('refuses an off-contract scalar rather than stringifying it — the one departure objectui#3907 did NOT touch', () => { + it('refuses an off-contract scalar rather than stringifying it — the one departure the objectui map-limb fix did NOT touch', () => { // `pickLocalized` accepts `unknown` and stringifies numbers/booleans // (`pickLocalized(42, 'en')` is `'42'`). This resolver's parameter is the // declared `I18nLabel`, so the shapes below are type errors — the @@ -388,7 +388,7 @@ describe('resolveI18nLabel — the rule departures converged with objectui#3907; }); }); -describe('resolveI18nLabel — the type signature refuses the calls that caused #6761', () => { +describe('resolveI18nLabel — the type signature refuses the calls behind the dropped dataset label', () => { // Reverse verification at the type level. `check:test-typecheck` compiles this // file (packages/spec/tsconfig.test.json), so each directive below is a REAL // check: delete the argument it guards and tsc goes red on the unused diff --git a/packages/spec/src/ui/i18n.test.ts b/packages/spec/src/ui/i18n.test.ts index b9467f69cfb..fe06c96ee7f 100644 --- a/packages/spec/src/ui/i18n.test.ts +++ b/packages/spec/src/ui/i18n.test.ts @@ -96,7 +96,7 @@ describe('I18nLabelSchema', () => { // runtime to the same line. Each rejection pin asserts the named error // content (issue code + message), not just parse failure. - it('rejects a lone `key` — the enforcement hole #10492 closes', () => { + it('rejects a lone `key`, which used to parse as a locale map', () => { const r = I18nLabelSchema.safeParse({ key: 'common.save' }); expect(r.success).toBe(false); const issues = JSON.stringify(r.error?.issues); @@ -164,7 +164,7 @@ describe('I18nLabelSchema', () => { expect( description, 'no key is generated for any label — a plain string is translatable only where a resolver + ' - + 'translation slot exist for its surface (#5377)', + + 'translation slot exist for its surface', ).not.toMatch(/auto-generated/i); }); }); @@ -186,7 +186,7 @@ describe('AriaPropsSchema', () => { expect(result.ariaLabel).toBe('Close dialog'); }); - it('accepts ariaLabel as an inline locale map — it rides `I18nLabelSchema` (#5728)', () => { + it('accepts ariaLabel as an inline locale map — it rides `I18nLabelSchema`', () => { const result = AriaPropsSchema.parse({ ariaLabel: { en: 'Close dialog', 'zh-CN': '关闭对话框' } }); expect(result.ariaLabel).toEqual({ en: 'Close dialog', 'zh-CN': '关闭对话框' }); }); @@ -200,7 +200,7 @@ describe('AriaPropsSchema', () => { })).toThrow(); }); - it('does not promise a generated translation key for `ariaLabel` either (#5377)', () => { + it('does not promise a generated translation key for `ariaLabel` either', () => { // The reporter's second surviving point. `ariaLabel` overrides the shared // describe, so it never carried the "auto-generated" sentence verbatim — // 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?: return JSON.stringify(r.error?.issues ?? []); } -describe('#4001 批 16 — AriaPropsSchema is closed (the door is real)', () => { +describe('批 16 — AriaPropsSchema is closed (the door is real)', () => { it('the controls parse — this suite fails closed, not by rejecting everything', () => { expect(AriaPropsSchema.safeParse({}).success).toBe(true); expect(AriaPropsSchema.safeParse({ ariaLabel: 'Close dialog' }).success).toBe(true); @@ -371,7 +371,7 @@ describe('#4001 批 16 — AriaPropsSchema is closed (the door is real)', () => expect(reject(objectuiAria as never, { ariaLabel: 'x', bogus: 1 })).toContain('these ARIA attributes'); }); - it('has no `.merge()` riders left at all — the four it had were retired at #4988', async () => { + it('has no `.merge()` riders left at all — the four it had were retired with the interaction-config family', async () => { // REPLACED WHOLESALE at #4988, not re-spelled. This test used to name five // shapes in `animation` / `dnd` / `keyboard` / `touch` and assert each still // accepted an undeclared key, because `X.merge(AriaPropsSchema.partial())` diff --git a/packages/spec/src/ui/inline-action-type.test.ts b/packages/spec/src/ui/inline-action-type.test.ts index dda74e15c2c..c5da44e7503 100644 --- a/packages/spec/src/ui/inline-action-type.test.ts +++ b/packages/spec/src/ui/inline-action-type.test.ts @@ -51,7 +51,7 @@ const legacyTo: InlineAction = { type: 'url', to: '/pricing' }; const scalar: InlineAction = 42; void [fromUnknown, scalar]; -describe('[#19920] InlineAction is an inline action body, not unknown', () => { +describe('InlineAction is an inline action body, not unknown', () => { it.each([ ['a url action', urlAction], ['an api action with a static payload', apiAction], diff --git a/packages/spec/src/ui/inline-action.test.ts b/packages/spec/src/ui/inline-action.test.ts index 9f81e20bad6..0391f14e54d 100644 --- a/packages/spec/src/ui/inline-action.test.ts +++ b/packages/spec/src/ui/inline-action.test.ts @@ -125,7 +125,7 @@ describe('InlineActionSchema — identity is optional, unlike a registered actio * same-name union. `bodyExtra` is that key — already declared on `ActionSchema` * for `type:'api'` bodies, now picked onto the inline shape. */ -describe('InlineActionSchema — `bodyExtra` is the payload key, `params` is not (#5777)', () => { +describe('InlineActionSchema — `bodyExtra` is the payload key, `params` is not', () => { it('accepts the showcase submit button verbatim, `{{page.}}` tokens included', () => { // examples/app-showcase/src/ui/pages/contact-form.page.ts — the site the // #5068 gate reported. Values are template tokens, not literals: the @@ -222,7 +222,7 @@ describe('InlineActionSchema — `bodyExtra` is the payload key, `params` is not * regression that drops either arm is a wrong instruction again, and the bare * "expected array, received object" would keep a `toThrow()`-shaped test green. */ -describe('object-form `params` prescribes per action type (#6828)', () => { +describe('object-form `params` prescribes per action type — its url meaning is retired, not re-keyed', () => { /** The `params` issue a parse produced, or a readable failure if it produced none. */ const paramsIssue = (r: { success: boolean; error?: z.ZodError }) => { expect(r.success).toBe(false); @@ -380,7 +380,7 @@ describe('element:button declares its action', () => { expect(r.success).toBe(false); }); - it('carries an api payload through to parse output (#5777, end to end)', () => { + it('carries an api payload through to parse output (end to end)', () => { // The #5068 gate parses `properties` through this schema, so this is the // exact call whose `component-props-invalid` finding the showcase page // produced before the ruling. diff --git a/packages/spec/src/ui/interaction-config-retirement.test.ts b/packages/spec/src/ui/interaction-config-retirement.test.ts index 8cdbfaeec62..f9af9c0f4a5 100644 --- a/packages/spec/src/ui/interaction-config-retirement.test.ts +++ b/packages/spec/src/ui/interaction-config-retirement.test.ts @@ -57,7 +57,7 @@ import { // conditional-type pin in this package was a no-op until #5286 (tsconfig excluded // `**/*.test.ts`; vitest never enables `typecheck`), so the compiler-API walk // with anti-vacuity guards is the load-bearing instrument. -describe('[#4988] ui/ interaction config family retirement', () => { +describe('ui/ interaction config family retirement — renderer behaviour, not authored metadata', () => { /** Every name the five modules exported (32 schema/enum consts + 32 types). */ const RETIRED_NAMES = [ // touch.zod.ts @@ -145,7 +145,7 @@ describe('[#4988] ui/ interaction config family retirement', () => { // ── ABSENCE (every entry, not just ./ui) ────────────────────────────── for (const name of RETIRED_NAMES) { const holders = holdersOf(name); - expect(holders, `${name} must have zero holders after #4988`).toEqual([]); + expect(holders, `${name} must have zero holders after the family retirement`).toEqual([]); } // ── SURVIVAL (on ./ui, where they live) ─────────────────────────────── @@ -186,7 +186,7 @@ describe('[#4988] ui/ interaction config family retirement', () => { } }; walk(srcRoot); - expect(importers, 'a resurrected import means the retirement is being undone — re-read #4988').toEqual([]); + expect(importers, 'a resurrected import means the retirement is being undone — these are renderer behaviour, not authored metadata').toEqual([]); }); it('runtime namespace agrees with the compiler view', async () => { @@ -200,7 +200,7 @@ describe('[#4988] ui/ interaction config family retirement', () => { } }); - it('the bare `ConflictResolution` name is now published by NOBODY — #4738 left it to ./ui alone', async () => { + it('the bare `ConflictResolution` name is now published by NOBODY — the connector-side rename left it to ./ui alone', async () => { // #4738 renamed the connector-side enum to `ConnectorConflictResolution` // BECAUSE `ui/offline.zod.ts` owned the bare name. That owner is gone, so // the bare name is unowned rather than re-homed: the rename is not undone diff --git a/packages/spec/src/ui/joined-report-block-type.test.ts b/packages/spec/src/ui/joined-report-block-type.test.ts index 5efe1e7f6f1..4354f9a42b2 100644 --- a/packages/spec/src/ui/joined-report-block-type.test.ts +++ b/packages/spec/src/ui/joined-report-block-type.test.ts @@ -64,7 +64,7 @@ const reportWithScalarBlock: Report = { name: 'r', label: 'R', type: 'joined', b const parsedScalarBlock: ParsedBlock = 42; void [fromUnknown, scalar, undeclaredKey, retiredChart, nestedJoined, reportWithScalarBlock, parsedScalarBlock]; -describe('[#19920] JoinedReportBlock is a joined-report block, not unknown', () => { +describe('JoinedReportBlock is a joined-report block, not unknown', () => { it('each block typed as JoinedReportBlock parses at the block door', () => { for (const block of [openBlock, listBlock]) { expect(JoinedReportBlockSchema.safeParse(block).success).toBe(true); diff --git a/packages/spec/src/ui/master-detail-detail-sort-field-retirement.test.ts b/packages/spec/src/ui/master-detail-detail-sort-field-retirement.test.ts index c74dc1fc9eb..6e4be9eb57b 100644 --- a/packages/spec/src/ui/master-detail-detail-sort-field-retirement.test.ts +++ b/packages/spec/src/ui/master-detail-detail-sort-field-retirement.test.ts @@ -486,7 +486,7 @@ describe('tree-scoped absence: nothing inside the declared radius still authors expect(judge('"ui/ObjectMasterDetailFormProps:details.sortField",')).toBeNull(); }); - it('the narrowing exempts only an inline grid field\'s own `sortField` (#21768)', () => { + it('the narrowing exempts only an inline grid field\'s own `sortField`, a key the grid widget declares', () => { // The inline `grid` form field declares the key: exempt, in each spelling of its widget. expect(judge("customFields: [{ name: 'lines', type: 'grid', columns: [{ name: 'qty', type: 'number' }], sortField: 'position' }]")).toBeNull(); expect(judge('{ "name": "lines", "type": "grid", "sortField": "position" }')).toBeNull(); diff --git a/packages/spec/src/ui/notification-embed-retirement.test.ts b/packages/spec/src/ui/notification-embed-retirement.test.ts index b77d01acceb..e63b1474e80 100644 --- a/packages/spec/src/ui/notification-embed-retirement.test.ts +++ b/packages/spec/src/ui/notification-embed-retirement.test.ts @@ -49,7 +49,7 @@ import { // Every `not`-shaped assertion carries an anti-vacuity guard, because the // failure mode of an absence pin is passing for the wrong reason (a path typo, // an entry that stops resolving, an empty enumeration). -describe('[#5015] NotificationAction / EmbedConfig removal — no entry exports either name', () => { +describe('NotificationAction / EmbedConfig removal — no entry exports either name', () => { /** The two schema names + the type aliases they published. */ const RETIRED = [ 'NotificationActionSchema', diff --git a/packages/spec/src/ui/notification.test.ts b/packages/spec/src/ui/notification.test.ts index c1ec6f7fd85..1ca8001fe09 100644 --- a/packages/spec/src/ui/notification.test.ts +++ b/packages/spec/src/ui/notification.test.ts @@ -75,7 +75,7 @@ describe('Type exports', () => { // flips to `true` and the `false` assignment fails `tsc --noEmit`. The bare // `Notification(Schema)` belongs to `@objectstack/spec/api` alone (#4610); // `NotificationConfig(Schema)` left the spec surface entirely. - it('does not re-expose the bare Notification/NotificationConfig names from ./ui (#4610)', () => { + it('does not re-expose the bare Notification/NotificationConfig names from ./ui — the bare `Notification` belongs to ./api alone', () => { type UiNotificationModule = typeof import('./notification.zod'); const hasNotificationSchema: 'NotificationSchema' extends keyof UiNotificationModule ? true @@ -106,7 +106,7 @@ describe('Type exports', () => { // the evidence is corrected, the retirement is NOT reopened, `./api` is NOT a // migration target, and the methodology lesson is written down where the next // cross-repo liveness verdict gets made. -describe('[#5781] ./ui notification tombstone — corrected evidence, no false FROM → TO', () => { +describe('./ui notification tombstone — corrected evidence, no false FROM → TO', () => { const SOURCE = path.resolve( path.dirname(url.fileURLToPath(import.meta.url)), 'notification.zod.ts', @@ -130,7 +130,7 @@ describe('[#5781] ./ui notification tombstone — corrected evidence, no false F .trim(); })(); - it('finds the #4610 note at all (anti-vacuity)', () => { + it('finds the tombstone note at all (anti-vacuity)', () => { expect(tombstone).toMatch(/^\[#4610\]/); expect(tombstone).toMatch(/NotificationConfigSchema/); expect(tombstone.length).toBeGreaterThan(800); diff --git a/packages/spec/src/ui/page.test.ts b/packages/spec/src/ui/page.test.ts index a89a951d4fb..02a89fb8280 100644 --- a/packages/spec/src/ui/page.test.ts +++ b/packages/spec/src/ui/page.test.ts @@ -491,7 +491,7 @@ describe('Page ARIA Integration', () => { // implementation had a single caller, so the whole `ResponsiveConfig` layout // vocabulary left with its last carrier. // --------------------------------------------------------------------------- -describe('[#11027] PageComponentSchema — retired `responsive`', () => { +describe('PageComponentSchema — retired `responsive`, which no renderer read', () => { it('REJECTS an authored `responsive` with the prescription (not "unrecognized key")', () => { let message = ''; try { @@ -693,7 +693,7 @@ describe('ElementDataSourceSchema', () => { // ElementDataSourceSchema `filter` — the ViewFilterRule ARRAY orthography // (ui#6206-B reaching the binding: #15442, decision batch #55, option A) // --------------------------------------------------------------------------- -describe('ElementDataSourceSchema `filter` — one filter orthography platform-wide (ui#6206-B, #15442)', () => { +describe('ElementDataSourceSchema `filter` — one filter orthography platform-wide, the ViewFilterRule array', () => { const RULES = [{ field: 'status', operator: 'equals', value: 'active' }]; const RECORD_FORM = { status: 'active' }; /** The objectui pin's own test authors write THIS at `dataSource.filter` — an AST tuple array. */ diff --git a/packages/spec/src/ui/react-blocks.test.ts b/packages/spec/src/ui/react-blocks.test.ts index db7ede8aab3..2bf6fe45af7 100644 --- a/packages/spec/src/ui/react-blocks.test.ts +++ b/packages/spec/src/ui/react-blocks.test.ts @@ -89,7 +89,7 @@ describe('REACT_BLOCKS — overlay/schema seam', () => { * hold HERE or the gate rejects what the contract still advertises (or, worse, * stops rejecting what came back). */ -describe('REACT_BLOCKS — the record:* family is out (#4413)', () => { +describe('REACT_BLOCKS — the record:* family is out, since no renderer read the props it published', () => { it('publishes no block that needs a record context', () => { const offenders = REACT_BLOCKS.filter((b) => isRecordContextBlockType(b.schemaType)); expect(offenders.map((b) => b.tag)).toEqual([]); @@ -144,7 +144,7 @@ describe('REACT_BLOCKS — the record:* family is out (#4413)', () => { * both directions — the canonical props must be published, and a retired * spelling must not quietly come back (or stay published beside its tombstone). */ -describe('REACT_BLOCKS — vocabulary convergence (#11284) and the ListView alias retirement (#14791)', () => { +describe('REACT_BLOCKS — vocabulary converges on the metadata tier, and the ListView alias retirement', () => { it('every curated dataProps entry resolves to a real schema prop', () => { // `build-react-blocks-contract`'s allow-list FILTERS the schema's props, so // a curated name the schema does not declare is silently dropped from the @@ -180,7 +180,7 @@ describe('REACT_BLOCKS — vocabulary convergence (#11284) and the ListView alia } }); - it('ListView: objectName / viewType are RETIRED — data / type are the only spellings, data required (#14791)', () => { + it('ListView: objectName / viewType are RETIRED — data / type are the only spellings, data required', () => { const lv = REACT_BLOCKS.find((b) => b.tag === 'ListView')!; const names = lv.interactions.map((i) => i.name); // No alias and no deprecation row: retired with no window. diff --git a/packages/spec/src/ui/report-joined-block-dataset.test.ts b/packages/spec/src/ui/report-joined-block-dataset.test.ts index 73462b9739e..b672138d74c 100644 --- a/packages/spec/src/ui/report-joined-block-dataset.test.ts +++ b/packages/spec/src/ui/report-joined-block-dataset.test.ts @@ -246,7 +246,7 @@ describe('the joined reports measured at the census parse unchanged', () => { }); }); -describe('the report form offers a block\'s `dataset` as the dataset picker, marked required (#21714)', () => { +describe('the report form offers a block\'s `dataset` as the dataset picker, marked required', () => { it('the "Joined blocks" repeater\'s `dataset` row declares `widget: \'ref:dataset\'` and `required: true`', () => { // Studio's report inspector renders this row spec: the widget hint picks // the cell's control, and `required` draws the column's marker and the diff --git a/packages/spec/src/ui/report.test.ts b/packages/spec/src/ui/report.test.ts index 6372178298c..7267ed356f2 100644 --- a/packages/spec/src/ui/report.test.ts +++ b/packages/spec/src/ui/report.test.ts @@ -230,7 +230,7 @@ describe('Joined reports refuse top-level selection keys', () => { * Each refusal asserts what a schema door owes: the issue `code`, its `path`, * and the first sentence of the prescription. */ -describe('A joined report draws no chart — block `chart` removed, container `chart` refused (#20161)', () => { +describe('A joined report draws no chart — block `chart` removed, container `chart` refused', () => { const BLOCK = { name: 'open_block', type: 'summary', dataset: 'tasks', rows: ['status'], values: ['task_count'] } as const; const JOINED = { name: 'overview', label: 'Overview', type: 'joined', blocks: [BLOCK] } as const; const CHART = { type: 'bar', xAxis: 'status', yAxis: 'task_count' } as const; @@ -331,7 +331,7 @@ describe('A joined report draws no chart — block `chart` removed, container `c * report authors (dashboard widgets had their own `options.sortBy` channel), * so a matrix report's date columns rendered in whatever order the rows arrived. */ -describe('Report ordering (#3916)', () => { +describe('Report ordering — a report declares its own sort', () => { it('accepts an order over a dimension and a measure, direction defaulting to asc', () => { const r = ReportSchema.parse({ name: 'hours_matrix', label: 'Hours', type: 'matrix', @@ -423,7 +423,7 @@ describe('Report ordering (#3916)', () => { * so the prescribed key is proved by a full green parse of an otherwise-valid * report, not merely by the absence of an `unrecognized_keys` issue. */ -describe('ReportSchema — scope-filter aliases point at `runtimeFilter` (#5013)', () => { +describe('ReportSchema — scope-filter aliases point at `runtimeFilter`', () => { const VALID = { name: 'pipeline', label: 'Pipeline', type: 'summary', dataset: 'sales', rows: ['stage'], values: ['revenue'], diff --git a/packages/spec/src/ui/responsive.test.ts b/packages/spec/src/ui/responsive.test.ts index fb7d9cc6392..c887dd19186 100644 --- a/packages/spec/src/ui/responsive.test.ts +++ b/packages/spec/src/ui/responsive.test.ts @@ -22,7 +22,7 @@ import { PageComponentSchema } from './page.zod'; // the curation's job is to catch the vocabularies authors still carry in — // the Tailwind ramp, and the knobs of the retired `responsive` block. // --------------------------------------------------------------------------- -describe('unknown keys are rejected, not stripped (#4001 batch 13)', () => { +describe('unknown keys are rejected, not stripped (batch 13)', () => { const unknownKeyIssue = (schema: { safeParse: (v: unknown) => any }, value: unknown) => { const result = schema.safeParse(value); expect(result.success).toBe(false); diff --git a/packages/spec/src/ui/section-group-reference.test.ts b/packages/spec/src/ui/section-group-reference.test.ts index e1568c5b205..3a8c0300d76 100644 --- a/packages/spec/src/ui/section-group-reference.test.ts +++ b/packages/spec/src/ui/section-group-reference.test.ts @@ -83,7 +83,7 @@ function at(issues: Issue[], path: Array): Issue { return issue!; } -describe('record:details section — the field-group reference form (#13855)', () => { +describe('record:details section — the field-group reference form, members derived from the group', () => { it('accepts a group reference and CARRIES THE KEY THROUGH the parse', () => { const parsed = detailsAccept({ sections: [{ group: 'contact_info' }] }); const sections = parsed.sections as Array>; @@ -178,7 +178,7 @@ describe('record:details section — the field-group reference form (#13855)', ( }); }); -describe('form.sections — the field-group reference form (#13855)', () => { +describe('form.sections — the field-group reference form, members derived from the group', () => { it('accepts a group reference and carries the key through transform AND fold', () => { // The value has to survive `FormSectionSchema`'s `.transform`, the form // view's `.superRefine`, and the `groups → sections` `.overwrite()` fold. diff --git a/packages/spec/src/ui/strictness-batch14.test.ts b/packages/spec/src/ui/strictness-batch14.test.ts index 902c4c99460..d2adcb86add 100644 --- a/packages/spec/src/ui/strictness-batch14.test.ts +++ b/packages/spec/src/ui/strictness-batch14.test.ts @@ -203,7 +203,7 @@ describe('批 14 — curated prescriptions', () => { * (prescriptions, aliases, the executor projection) is pinned in * `dashboard-compareto.test.ts`. */ - it('dashboard compareTo: no longer a union — the #4001 arm-error limit does not apply to it (#5011)', () => { + it('dashboard compareTo: no longer a union but the executor contract — the strictness arm-error limit does not apply to it', () => { const r = DashboardWidgetSchema.safeParse({ id: 'w1', dataset: 'sales', values: ['revenue'], compareTo: { offset: '7d', granularity: 'month' }, @@ -327,7 +327,7 @@ function importersOf(targetRel: string): string[] { return out.sort(); } -describe('批 14 — the file that split, after #5015 retired its dead half', () => { +describe('批 14 — the file that split, after its dead half was retired', () => { // ── What this block is now, and why it is not just deleted ──────────────── // // 批 14 measured eleven strip sites and reclassified two — `NotificationAction` @@ -366,7 +366,7 @@ describe('批 14 — the file that split, after #5015 retired its dead half', () expect(importersOf('ui/sharing.zod')).not.toContain('stack.zod.ts'); }); - it('SharingConfig keeps the live carrier that made this file split (#5015 took the other half)', () => { + it('SharingConfig keeps the live carrier that made this file split (EmbedConfig, the other half, was retired)', () => { // The carrier is specific, and that asymmetry IS the 批 14 reclassification: // the form view names `SharingConfigSchema`. `EmbedConfigSchema` was named by // nothing, which is what #5015 acted on. diff --git a/packages/spec/src/ui/view-authoring-wire-split.test.ts b/packages/spec/src/ui/view-authoring-wire-split.test.ts index 4cb989ed9a7..59cd0895a4d 100644 --- a/packages/spec/src/ui/view-authoring-wire-split.test.ts +++ b/packages/spec/src/ui/view-authoring-wire-split.test.ts @@ -102,7 +102,7 @@ const OVERLAY_BASE = { // =========================================================================== // 1. The doors — a posture is a property of a PARSE (#4583) // =========================================================================== -describe('#5074 — the two doors, which is the whole point of the split', () => { +describe('the two doors, which is the whole point of the split: strict at authoring, reopened on the wire', () => { it('the `view` metadata type resolves to a registered schema (the wire / 422 door)', () => { expect(getMetadataTypeSchema('view')).toBeDefined(); }); @@ -126,7 +126,7 @@ describe('#5074 — the two doors, which is the whole point of the split', () => // =========================================================================== // 2. The AUTHORING gate — tightened // =========================================================================== -describe('#5074 — `ViewItemSchema` is the authoring gate and is now strict', () => { +describe('`ViewItemSchema` is the authoring gate and is now strict', () => { it('the one-letter `confg` typo is REJECTED, not stripped into an empty ViewItem', () => { // The failure the ruling turned on: before the split this parsed clean and // produced a ViewItem with no view configuration at all — #1535's @@ -189,7 +189,7 @@ describe('#5074 — `ViewItemSchema` is the authoring gate and is now strict', ( expect(reject(ListViewSchema, { columns: ['name'], sort: [CONSOLE_SORT_ROW] })).toContain('console row key'); }); - it('…and `direction` is still answered with `order` — #4721, the silently REVERSED sort', () => { + it('…and `direction` is still answered with `order` — it once parsed as a silently REVERSED sort', () => { // `{ field, direction: 'desc' }` used to parse to `{ field, order: 'asc' }`. // This alias is why closing the sort entry was worth doing at all. expect(reject(ListViewSchema, { columns: ['name'], sort: [{ field: 'name', direction: 'desc' }] })) @@ -205,7 +205,7 @@ describe('#5074 — `ViewItemSchema` is the authoring gate and is now strict', ( // =========================================================================== // 3. The WIRE door — every console PUT body still parses, at every depth // =========================================================================== -describe('#5074 — the wire door accepts what the platform itself writes', () => { +describe('the wire door accepts what the platform itself writes', () => { it('member 1 carries the pin round-trip: `{...storedItem, isPinned}` (`ObjectView.tsx:882`)', () => { accept(ViewItemWireSchema, { ...RECORD, isPinned: true, sortOrder: 3 }); accept(ViewMetadataSchema, { ...RECORD, isPinned: true, sortOrder: 3 }); @@ -269,13 +269,13 @@ describe('#5074 — the wire door accepts what the platform itself writes', () = // It runs in the same `z.preprocess` stage as `stripViewConsoleDecorations`, // so it is the first thing every body above meets. These pin that it is inert // on the wire — the failure mode of a precondition is 422-ing our own writes. - it('#5599 — the precondition does not disturb the decoration strip it shares a stage with', () => { + it('the identity precondition does not disturb the decoration strip it shares a stage with', () => { // The strip runs only AFTER the identity check passes; a decorated body // must still arrive at the union stripped, not rejected. accept(ViewMetadataSchema, { ...OVERLAY_BASE, sort: [CONSOLE_SORT_ROW], filter: [CONSOLE_FILTER_ROW] }); }); - it('#5599 — a body carrying ONLY an aux round-trip key still reaches the union', () => { + it('identity precondition — a body carrying ONLY an aux round-trip key still reaches the union', () => { // `updateView` PUTs `{ ...current, ...partial }`; when there is no stored // item to merge, `current` is empty and the body is the bare partial. // `isPinned`/`sortOrder` are declared on member 1, so they are vocabulary. @@ -295,7 +295,7 @@ describe('#5074 — the wire door accepts what the platform itself writes', () = } }); - it('#5599 — …but a body speaking NO view key is stopped before any member runs', () => { + it('identity precondition — …but a body speaking NO view key is stopped before any member runs', () => { const r = ViewMetadataSchema.safeParse({ nope: 1 }); expect(r.success).toBe(false); if (r.success) return; @@ -307,7 +307,7 @@ describe('#5074 — the wire door accepts what the platform itself writes', () = // =========================================================================== // 4. The strip removes the decoration and NOTHING else // =========================================================================== -describe('#5074 — `stripViewConsoleDecorations`, the write-path mirror of `stripReadDecorations`', () => { +describe('`stripViewConsoleDecorations`, the write-path mirror of `stripReadDecorations`', () => { it('declares its vocabulary rather than hard-coding a key at the call site', () => { expect([...VIEW_CONSOLE_ROW_DECORATIONS]).toEqual(['id']); }); @@ -372,7 +372,7 @@ describe('#5074 — `stripViewConsoleDecorations`, the write-path mirror of `str // =========================================================================== // 5. The two landmines the ruling named // =========================================================================== -describe('#5074 — landmine 1: `/api/v1/meta/types/view` must still get an `anyOf`', () => { +describe('landmine 1: `/api/v1/meta/types/view` must still get an `anyOf`', () => { it('the REGISTERED schema converts to a four-member `anyOf`, through the preprocess', () => { // Studio's SchemaForm is built from this. `z.preprocess` makes the root a // pipe; a pipe converts to its output side, so the union survives — but @@ -397,7 +397,7 @@ describe('#5074 — landmine 1: `/api/v1/meta/types/view` must still get an `any expect(json).not.toContain('"console row key"'); }); - it('#5599 — the identity precondition is invisible to the emitted contract', () => { + it('the identity precondition is invisible to the emitted contract', () => { // This is WHY the check reports through the existing preprocess's `ctx` // rather than as an extra pipe stage. `z.unknown().superRefine(…).pipe(union)` // would satisfy the output-direction assertion above and silently degrade @@ -420,7 +420,7 @@ describe('#5074 — landmine 1: `/api/v1/meta/types/view` must still get an `any }); }); -describe('#5074 — landmine 2: the lazySchema Proxy / ADR-0089 D3a trap', () => { +describe('landmine 2: the lazySchema Proxy / ADR-0089 D3a trap', () => { // `lazySchema` returns a Proxy, and zod keys its `toJSONSchema` `seen` map on // the node it was handed. When a wrapper-type processor (pipe/lazy/optional) // then looks itself up by the REAL instance, the entry is missing and zod diff --git a/packages/spec/src/ui/view-console-round-trip-keys.test.ts b/packages/spec/src/ui/view-console-round-trip-keys.test.ts index b3c47f921e0..e4cbc4cd7af 100644 --- a/packages/spec/src/ui/view-console-round-trip-keys.test.ts +++ b/packages/spec/src/ui/view-console-round-trip-keys.test.ts @@ -94,7 +94,7 @@ function meaningOf(field: any): string | undefined { return undefined; } -describe('VIEW_CONSOLE_ROUND_TRIP_KEYS — the census record (#20456)', () => { +describe('VIEW_CONSOLE_ROUND_TRIP_KEYS — the census record of the keys the console reads back', () => { it('equals the measured census, key for key and branch for branch', () => { const record = Object.fromEntries( Object.entries(VIEW_CONSOLE_ROUND_TRIP_KEYS).map(([k, v]) => [k, [...v].sort()]), @@ -104,7 +104,7 @@ describe('VIEW_CONSOLE_ROUND_TRIP_KEYS — the census record (#20456)', () => { }); }); -describe('each census key is declared on each member that judges its row (#20456)', () => { +describe('each census key is declared on each member that judges its row', () => { const pairs = Object.entries(CENSUS).flatMap(([key, branches]) => branches.map((b) => [key, b] as const)); it.each(pairs)('`%s` is a declared, described member of `%s`', (key, branch) => { @@ -127,7 +127,7 @@ describe('each census key is declared on each member that judges its row (#20456 }); }); -describe('the declarations are typed, not passthrough (#20456)', () => { +describe('the declarations are typed, not passthrough', () => { it.each([ ['isPinned', 'yes'], ['sortOrder', 1.5], @@ -144,7 +144,7 @@ describe('the declarations are typed, not passthrough (#20456)', () => { }); }); -describe('what the census mapped to an existing spelling stays undeclared (#20456)', () => { +describe('what the census mapped to an existing spelling stays undeclared', () => { it.each([ ['objectName', 'object'], ['id', 'name'], @@ -158,7 +158,7 @@ describe('what the census mapped to an existing spelling stays undeclared (#2045 }); }); -describe('the authoring door still refuses the console-only keys (#20456)', () => { +describe('the authoring door still refuses the console-only keys', () => { it.each(['visibility', 'isPinned', 'sortOrder', '_isOverride'])('`defineViewItem` input with `%s` is refused by name', (key) => { const r = ViewItemSchema.safeParse({ ...ROW.viewItem, [key]: VALUE[key] }); expect(r.success).toBe(false); diff --git a/packages/spec/src/ui/view-field-order-composition.pin.test.ts b/packages/spec/src/ui/view-field-order-composition.pin.test.ts index 58b21ffda8f..24bbef4e78d 100644 --- a/packages/spec/src/ui/view-field-order-composition.pin.test.ts +++ b/packages/spec/src/ui/view-field-order-composition.pin.test.ts @@ -113,7 +113,7 @@ const COMPOSED_LIST = { fieldOrder: ['amount', 'owner'], }; -describe('[#15184] the list-view field composition is declared, not implied', () => { +describe('the list-view field composition is declared, not implied', () => { describe('declaration — the published `.describe()` of each composing key', () => { it.each(COMPOSITION)('`%s` names all three keys of the composition', (key) => { const text = description(key); diff --git a/packages/spec/src/ui/view-filter-rule-value-shape.test.ts b/packages/spec/src/ui/view-filter-rule-value-shape.test.ts index 9bbf7f137da..18bddf2040f 100644 --- a/packages/spec/src/ui/view-filter-rule-value-shape.test.ts +++ b/packages/spec/src/ui/view-filter-rule-value-shape.test.ts @@ -95,7 +95,7 @@ function valueIssue(result: ReturnType) { return issues[0]!; } -describe('#6227 — the reported shape is refused at authoring time', () => { +describe('the reported shape — a set operator carrying a scalar — is refused at authoring time', () => { it('refuses the card example: a set operator carrying a scalar', () => { const result = parse({ field: 'stage', operator: 'not_in', value: 'won' }); const issue = valueIssue(result); @@ -148,7 +148,7 @@ describe('#6227 — the reported shape is refused at authoring time', () => { }); }); -describe('#6227 — the three constraints mirror the runtime gate exactly', () => { +describe('the three constraints mirror the runtime gate exactly', () => { it.each([ ['in', 'scalar string', 'won'], ['in', 'scalar number', 5], @@ -181,7 +181,7 @@ describe('#6227 — the three constraints mirror the runtime gate exactly', () = }); }); -describe('#6227 — what stays accepted (the #5685 side: never stricter than the runtime)', () => { +describe('what stays accepted (never stricter than the runtime)', () => { it.each([ ['in + array', { field: 'f', operator: 'in', value: ['a', 'b'] }], ['not_in + array', { field: 'f', operator: 'not_in', value: ['a'] }], @@ -246,13 +246,13 @@ describe('#6227 — what stays accepted (the #5685 side: never stricter than the }); }); -describe('#19514 — the scalar arm, in both directions', () => { +describe('the scalar arm, in both directions: a single-valued operator refuses an array', () => { /** The three pins this arm MOVED, named as such so the reversal is legible. */ it.each([ ['equals + array', { field: 'f', operator: 'equals', value: ['a', 'b'] }, 'equals'], ['not_equals + array', { field: 'f', operator: 'not_equals', value: ['a'] }, 'not_equals'], ['greater_than + array', { field: 'f', operator: 'greater_than', value: [1, 2] }, 'greater_than'], - ])('refuses %s — recorded as ACCEPTED at #6227, reversed on measurement', (_label, rule, operator) => { + ])('refuses %s — recorded as ACCEPTED by the first value-shape rule, reversed on measurement', (_label, rule, operator) => { const issue = valueIssue(parse(rule as Record)); expect(issue.code).toBe('custom'); expect(issue.path).toEqual(['value']); @@ -311,7 +311,7 @@ describe('#19514 — the scalar arm, in both directions', () => { }); }); -describe('#19751 — an ABSENT value on an operator that takes one is refused', () => { +describe('an ABSENT value on an operator that takes one is refused', () => { /** The rule as a view stores it when the comparand was never written. */ const valueless = (operator: string, field = 'f') => ({ field, operator }); @@ -422,7 +422,7 @@ describe('#19751 — an ABSENT value on an operator that takes one is refused', }); }); -describe('#6227 — the exported vocabularies are the ones the check reads', () => { +describe('the exported vocabularies are the ones the check reads', () => { it('declares exactly the operators that lower to $in / $nin', () => { expect([...VIEW_FILTER_LIST_VALUE_OPERATORS]).toEqual(['in', 'not_in']); }); @@ -441,7 +441,7 @@ describe('#6227 — the exported vocabularies are the ones the check reads', () }); }); -describe('#6227 — the refinement does not disturb the schema around it', () => { +describe('the value-shape refinement does not disturb the schema around it', () => { it('still folds alias operators to canonical on a CONFORMING rule', () => { const parsed = ViewFilterRuleSchema.parse({ field: 'tags', operator: 'nin', value: ['a'] }); expect(parsed.operator).toBe('not_in'); diff --git a/packages/spec/src/ui/view-filter-rule-wire-id.test.ts b/packages/spec/src/ui/view-filter-rule-wire-id.test.ts index 67eed23fa5f..530e46f9335 100644 --- a/packages/spec/src/ui/view-filter-rule-wire-id.test.ts +++ b/packages/spec/src/ui/view-filter-rule-wire-id.test.ts @@ -93,7 +93,7 @@ const CONSOLE_PUT_BODY = { ...OVERLAY_BASE, filter: [CONSOLE_FILTER_ROW] } as co // =========================================================================== // 1. The door — a parse must exist, or none of the rest means anything // =========================================================================== -describe('#5114 — the door this shape is reached through', () => { +describe('the door this shape is reached through', () => { it('the `view` metadata type resolves to a registered schema (the save-time 422 door)', () => { // `saveMetaItem` validates the PUT body against this schema and answers 422 // on failure. Without this door the rest of the file would be theory. @@ -104,7 +104,7 @@ describe('#5114 — the door this shape is reached through', () => { // =========================================================================== // 2. The regression itself — all three paths the console body travels // =========================================================================== -describe('#5114 — a console-written filter row, judged per door (#5074)', () => { +describe('a console-written filter row, judged per door: refused by name when authored, stripped on the wire', () => { it('1/3 `ViewFilterRuleSchema` — the AUTHORING shape — now REJECTS the row, by name', () => { // Inverted vs #5114: this was green while the hotfix stood. The rejection // has to carry its reason, or an author fixes it by inventing a key. @@ -148,7 +148,7 @@ describe('#5114 — a console-written filter row, judged per door (#5074)', () = // =========================================================================== // 3. Open is not undefended — what reopening did NOT give away // =========================================================================== -describe('#5114 — the close gave away no validation, and declared no UI key', () => { +describe('the close gave away no validation, and declared no UI key', () => { it('`id` is DROPPED on the wire path, not declared onto the surface', () => { // The distinction the whole fix turns on, re-measured at the door that now // owns the tolerance. Declaring `id` would make it authorable (and teach an @@ -193,7 +193,7 @@ describe('#5114 — the close gave away no validation, and declared no UI key', // =========================================================================== // 4. The mechanism, pinned where it bit — `.strip()` does not recurse // =========================================================================== -describe('#5114 — why the flattened member could not rescue this block', () => { +describe('why the flattened member could not rescue this block', () => { // Both assertions here run on the FILTER-FREE overlay on purpose: they are // controls for the member's own posture, so they must hold whichever way // `ViewFilterRuleSchema` is written — and they did, across the #5114 reopen diff --git a/packages/spec/src/ui/view-form-features-root.test.ts b/packages/spec/src/ui/view-form-features-root.test.ts index e59de96b9e7..dd5419c7178 100644 --- a/packages/spec/src/ui/view-form-features-root.test.ts +++ b/packages/spec/src/ui/view-form-features-root.test.ts @@ -80,7 +80,7 @@ const formWithFieldPredicate = (visibleWhen: unknown) => ({ sections: [{ fields: [{ field: 'phone', visibleWhen }] }], }); -describe('form-view predicates reject the features.* root (objectui#6262)', () => { +describe('form-view predicates reject the features.* root', () => { it('refuses a field-level visibleWhen naming features.* (bare-string shorthand)', () => { const issues = reject(formWithFieldPredicate('features.multiOrgEnabled == true')); expectFeaturesRefusal(issues, ['sections', 0, 'fields', 0, 'visibleWhen']); @@ -205,7 +205,7 @@ describe('positive controls — the scanner narrows exactly as far as the ruling accept(formWithFieldPredicate('record.tag == "features"')); }); - it('an AST-only envelope no longer reaches this scanner — #15811 refuses it one layer up', () => { + it('an AST-only envelope no longer reaches this scanner — an evaluated slot requires a `source`, so it is refused one layer up', () => { // It used to pass here, and the reason was sound as far as it went: the // authoring shape is the source string, and an AST-only envelope has // nothing to scan. What that boundary left open is that the slot admitted diff --git a/packages/spec/src/ui/view-gantt-tree-config-closed-15469.test.ts b/packages/spec/src/ui/view-gantt-tree-config-closed-15469.test.ts index 0b53e14f8a6..59a5f9e34fe 100644 --- a/packages/spec/src/ui/view-gantt-tree-config-closed-15469.test.ts +++ b/packages/spec/src/ui/view-gantt-tree-config-closed-15469.test.ts @@ -72,7 +72,7 @@ const GANTT_REQUIRED = { startDateField: 'start_date', endDateField: 'end_date', // =========================================================================== // 1. The card's probe — five blocks, one undeclared key, two lit controls // =========================================================================== -describe('the card\'s probe: every view config block refuses `bogus_key_xyz` (#15469)', () => { +describe('the probe that found the gap: every view config block refuses `bogus_key_xyz`', () => { it('CONTROLS — the mechanism works in this zod, in this process', () => { // Two spellings of a closed object, so "the sibling schemas refuse" below // is measured against a lit instrument rather than assumed. @@ -96,7 +96,7 @@ describe('the card\'s probe: every view config block refuses `bogus_key_xyz` (#1 expect(issues.filter((i) => i.code !== 'unrecognized_keys'), 'the ONLY issue is the unknown key').toHaveLength(0); }); - it('gantt — the strictObject error suggests the closest declared key (the #14471 typo)', () => { + it('gantt — the strictObject error suggests the closest declared key (the `colourField` typo)', () => { const [issue] = refuse(GanttConfigSchema, { ...GANTT_REQUIRED, colourField: 'status' }); expect(issue.message).toContain('`colourField`'); expect(issue.message).toMatch(/Did you mean .*`colourField` → `colorField`/); @@ -140,7 +140,7 @@ const FULL_TEN = { }, } as const; -describe('the ten keys plugin-gantt read through the window are DECLARED (#15469)', () => { +describe('the ten keys plugin-gantt read through the window are DECLARED', () => { it('the shape carries exactly the ten, beside the nineteen it already had', () => { const keys = Object.keys(GanttConfigSchema.shape); for (const k of Object.keys(FULL_TEN)) expect(keys, `${k} must be a declared member`).toContain(k); @@ -225,7 +225,7 @@ describe('the ten keys plugin-gantt read through the window are DECLARED (#15469 // =========================================================================== // 3. The doors — the closure reaches an author through the schemas they parse with // =========================================================================== -describe('a gantt typo is refused AT `gantt` through the real doors (#15469)', () => { +describe('a gantt typo is refused AT `gantt` through the real doors', () => { const typoView = { type: 'gantt', columns: ['name'], gantt: { ...GANTT_REQUIRED, colourField: 'status' } }; it('ListViewSchema — refused at [gantt], naming the key and suggesting colorField', () => { diff --git a/packages/spec/src/ui/view-inline-object-binding.test.ts b/packages/spec/src/ui/view-inline-object-binding.test.ts index 617d4989146..77ed593bb61 100644 --- a/packages/spec/src/ui/view-inline-object-binding.test.ts +++ b/packages/spec/src/ui/view-inline-object-binding.test.ts @@ -71,7 +71,7 @@ function refusalText(body: unknown): string { return JSON.stringify((r as { error?: { issues?: unknown } }).error?.issues ?? []); } -describe('[#7741] the runtime write door refuses the unbound inline view config', () => { +describe('the runtime write door refuses the unbound inline view config', () => { it('REFUSES the card\'s exact repro body through getMetadataTypeSchema(\'view\')', () => { const r = door().safeParse(REPRO); expect(r.success).toBe(false); @@ -143,7 +143,7 @@ describe('[#7741] the runtime write door refuses the unbound inline view config' }); }); -describe('[#7741] what the door still accepts, byte for byte', () => { +describe('what the door still accepts, byte for byte', () => { it('ACCEPTS the properly bound inline body — and adds nothing to it', () => { const r = door().safeParse(BOUND); expect(r.success, JSON.stringify((r as { error?: { issues?: unknown } }).error?.issues)).toBe(true); @@ -164,7 +164,7 @@ describe('[#7741] what the door still accepts, byte for byte', () => { expect(r.data).toEqual(record); }); - it('ACCEPTS the container arm byte-identically — #6391\'s union membership is intact', () => { + it('ACCEPTS the container arm byte-identically — its union membership is intact', () => { const container = { object: 'showcase_task', list: { type: 'grid', columns: ['title'], data: { provider: 'object', object: 'showcase_task' } }, @@ -192,7 +192,7 @@ describe('[#7741] what the door still accepts, byte for byte', () => { }); }); -describe('[#7741] the emitted contract declares what it enforces', () => { +describe('the emitted contract declares what it enforces', () => { it('the inline arms\' JSON Schema marks `object` and `viewKind` required, in both io directions', () => { // Studio's SchemaForm is generated from this — declared = enforced means // an AI author is TOLD the binding is required before the 422 says so.