From 65b42b7d1dfb06489f9a79af66c24f9f7a49adc5 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 8 Oct 2026 23:00:43 +0000 Subject: [PATCH] test(spec): the second root-level test file group's titles state each cited decision in words instead of a tracker number (stage 29) Stage 29 of the class (e) burn-down: the test strings shipped under packages/spec/src. The group is the 15 test files directly in src/, from root-entry-migrations-split.pin.test.ts through stack.test.ts; 12 of them carried 57 tracker ids in test titles and one declared label. Each title now either states the decision its record made, in words, or drops the number where the title already says it. Text only: no assertion, identifier, test count, code comment, file name or non-test file changes. Claude-Session: https://claude.ai/code/session_01DhTqaEHqPVSVnAkjG3jywn Co-authored-by: Claude --- .../root-entry-migrations-split.pin.test.ts | 2 +- .../spec/src/stack-artifact-crossref.test.ts | 22 ++++++++-------- .../spec/src/stack-artifact-packages.test.ts | 6 ++--- .../stack-cross-reference-envelope.test.ts | 4 +-- packages/spec/src/stack-dev-logins.test.ts | 8 +++--- .../stack-email-template-locale-floor.test.ts | 12 ++++----- .../src/stack-inline-action-crossref.test.ts | 26 +++++++++---------- .../src/stack-json-stage-package-body.test.ts | 8 +++--- .../spec/src/stack-refusal-envelopes.test.ts | 4 +-- packages/spec/src/stack-requires.test.ts | 8 +++--- .../spec/src/stack-top-level-strict.test.ts | 10 +++---- packages/spec/src/stack.test.ts | 4 +-- 12 files changed, 57 insertions(+), 57 deletions(-) diff --git a/packages/spec/src/root-entry-migrations-split.pin.test.ts b/packages/spec/src/root-entry-migrations-split.pin.test.ts index 88ccd6c23cb..5884be9b2f4 100644 --- a/packages/spec/src/root-entry-migrations-split.pin.test.ts +++ b/packages/spec/src/root-entry-migrations-split.pin.test.ts @@ -140,7 +140,7 @@ function valueGraph(entry: string): Set { return new Set([...seen].map((f) => relative(SRC, f).split('\\').join('/'))); } -describe('the migration chain is `@objectstack/spec/migrations`, not the root (#20646)', () => { +describe('the migration chain is `@objectstack/spec/migrations`, not the root', () => { it('the root module exports none of the moved values', () => { expect(MOVED_VALUES.filter((name) => name in root)).toEqual([]); }); diff --git a/packages/spec/src/stack-artifact-crossref.test.ts b/packages/spec/src/stack-artifact-crossref.test.ts index a54db00c939..f7d4ad9fa22 100644 --- a/packages/spec/src/stack-artifact-crossref.test.ts +++ b/packages/spec/src/stack-artifact-crossref.test.ts @@ -142,7 +142,7 @@ const SEED_ON_CASE = "Seed data references object 'crm_case' which is not define const GRANT_ON_NOWHERE = `Permission 'sales_rep' grants on object '${NOWHERE}' which is not defined in objects.`; const SEED_ON_NOWHERE = `Seed data references object '${NOWHERE}' which is not defined in objects.`; -describe('#18202 — the per-stack pass, without the opt-in', () => { +describe('the per-stack pass, without the opt-in', () => { it('REFUSES an app-owned grant and seed on a module-owned object — the reported defect', () => { const refused = refusalOf(() => defineStack(appConfig('crm_case', 'crm_case'))); expect(refused?.code).toBe('STACK_CROSS_REFERENCE_INVALID'); @@ -159,7 +159,7 @@ describe('#18202 — the per-stack pass, without the opt-in', () => { }); }); -describe('#18202 — `artifactObjects` widens exactly the two ARTIFACT-SCOPED classes', () => { +describe('`artifactObjects` widens exactly the two ARTIFACT-SCOPED classes', () => { it('ACCEPTS the app package once the artifact’s other objects are declared', () => { const service = serviceStack(); const accepted = refusalOf(() => @@ -227,7 +227,7 @@ describe('#18202 — `artifactObjects` widens exactly the two ARTIFACT-SCOPED cl }); }); -describe('#18202 — the ARTIFACT pass: the refusal MOVED, it did not disappear', () => { +describe('the ARTIFACT pass: the refusal MOVED, it did not disappear', () => { /** The opt-in is a promise about a composition; this is the composition calling it in. */ const composeClaiming = (name: string) => { const service = serviceStack(); @@ -267,7 +267,7 @@ describe('#18202 — the ARTIFACT pass: the refusal MOVED, it did not disappear' }); }); -describe('#18202 — #14122 §6 compatibility: a stack that does not opt in is untouched', () => { +describe('compatibility with the multi-package artifact: a stack that does not opt in is untouched', () => { it('a single-package stack still refuses its own dangling grant', () => { const refused = refusalOf(() => defineStack(anyStack({ @@ -303,7 +303,7 @@ describe('#18202 — #14122 §6 compatibility: a stack that does not opt in is u }); }); -describe('#18202 — the object-less leniency the ARTIFACT pass inherits verbatim', () => { +describe('the object-less leniency the ARTIFACT pass inherits verbatim', () => { /** * hotcrm#1449's shape: the app package declares NO objects, so * `validateCrossReferences` early-returns and the ARTIFACT pass skips it for @@ -340,7 +340,7 @@ describe('#18202 — the object-less leniency the ARTIFACT pass inherits verbati * it, `collectArtifactCrossReferenceErrors`'s docstring says it, and these * fixtures hold it. */ -describe('#18202 — an input that bypassed the strict parse IS checked at composition', () => { +describe('an input that bypassed the strict parse IS checked at composition', () => { /** The app package as an unparsed stack: `strict: false` skips every validation. */ const unparsedApp = (grantObject: string, seedObject: string) => defineStack(appConfig(grantObject, seedObject), { strict: false }); @@ -377,7 +377,7 @@ describe('#18202 — an input that bypassed the strict parse IS checked at compo expect(refused?.issues).toContain(SEED_ON_NOWHERE); }); - it('REFUSES a hand-built stack object before either rule runs — it was never built (#20367 ruling B)', () => { + it('REFUSES a hand-built stack object before either rule runs — it was never built by a stack producer', () => { // Since ruling B a hand-built object no longer reaches the artifact pass: // `composeStacks` refuses an input no stack producer built at its step 0, // naming the input, so the two rules above never get to run on it. The @@ -423,7 +423,7 @@ describe('#18202 — an input that bypassed the strict parse IS checked at compo * before this pass runs — skipping it composed an artifact without that * stack's grants or seed rows — so those two cases assert the refusal. */ -describe('#18202 — a malformed collection on an unparsed input is skipped or refused, never a bare TypeError', () => { +describe('a malformed collection on an unparsed input is skipped or refused, never a bare TypeError', () => { /** Collect `console.warn` for one call, restoring the real one afterwards. */ function warningsDuring(run: () => unknown): { warnings: string[]; thrown: Envelope | null } { const warnings: string[] = []; @@ -454,7 +454,7 @@ describe('#18202 — a malformed collection on an unparsed input is skipped or r const composeWith = (stack: ReturnType) => () => composeStacks([serviceStack(), stack], { manifest: 'preserve' }); - it('a non-array `permissions` is refused by the concat pass, never a bare TypeError (#19784)', () => { + it('a non-array `permissions` is refused by the concat pass, never a bare TypeError', () => { // Map format written onto a built stack (only `defineStack` normalizes it). It // is NOT iterable, which is what makes this the case that distinguishes a // guard from a bare `TypeError`: a string value would iterate its @@ -465,7 +465,7 @@ describe('#18202 — a malformed collection on an unparsed input is skipped or r expect(thrown?.status).toBe(422); }); - it('a non-array `data` is refused by the concat pass, never a bare TypeError (#19784)', () => { + it('a non-array `data` is refused by the concat pass, never a bare TypeError', () => { const { thrown } = warningsDuring(composeWith(malformed({ data: 42 }))); expect(thrown?.code).toBe('STACK_SCHEMA_INVALID'); expect(thrown?.status).toBe(422); @@ -511,7 +511,7 @@ describe('#18202 — a malformed collection on an unparsed input is skipped or r * This block is the fence on that qualifier: if the early return is ever * removed, the qualifier becomes wrong and these tests say so. */ -describe('#18202 — a composition of ONE package never reaches the artifact pass', () => { +describe('a composition of ONE package never reaches the artifact pass', () => { const claiming = () => defineStack(appConfig(NOWHERE, NOWHERE), { artifactObjects: [NOWHERE] }); it('accepts a one-input composition whose claim names an object nothing defines', () => { diff --git a/packages/spec/src/stack-artifact-packages.test.ts b/packages/spec/src/stack-artifact-packages.test.ts index d3f51e096f3..0b210997c01 100644 --- a/packages/spec/src/stack-artifact-packages.test.ts +++ b/packages/spec/src/stack-artifact-packages.test.ts @@ -250,7 +250,7 @@ describe('ADR-0130 D4 — each `packages` entry is an OBJECT wrapping its manife expect(issueAt(result, ['packages'])?.code).toBe('invalid_type'); }); - it('refuses `packages: null` — `.optional()` admits `undefined`, not `null` (#19926)', () => { + it('refuses `packages: null` — `.optional()` admits `undefined`, not `null`', () => { // `null` is a present, non-array `packages`: malformed, not absent. Every // reader of the key refuses it too (`INVALID_ARTIFACT_PACKAGES`); the rule // is stated once, beside `AssembledPackageBodySchema`. @@ -322,7 +322,7 @@ describe('ADR-0130 D4 — `packages` has a declared composition rule', () => { ]); }); - it('refuses `packages: null` on any input when composing two or more stacks (#19926)', () => { + it('refuses `packages: null` on any input when composing two or more stacks', () => { // The concat pass skips `undefined` alone: `null` is malformed, not // absent, and is refused with the strict parse's own envelope rather than // composed as if the stack declared no packages. `strict: false` is the @@ -352,7 +352,7 @@ describe('ADR-0130 D4 — `packages` has a declared composition rule', () => { expect(composed.packages.map((p) => p.manifest.id)).toEqual(['com.example.crm.cpq']); }); - it('does not warn about an undeclared composition rule (#5005 rule 3)', () => { + it('does not warn about an undeclared composition rule', () => { composeStacks([ raw({ manifest: crmManifest, packages: [{ manifest: crmManifest }] }), raw({ manifest: cpqManifest }), diff --git a/packages/spec/src/stack-cross-reference-envelope.test.ts b/packages/spec/src/stack-cross-reference-envelope.test.ts index 606746e18e5..c17c67c8c34 100644 --- a/packages/spec/src/stack-cross-reference-envelope.test.ts +++ b/packages/spec/src/stack-cross-reference-envelope.test.ts @@ -88,7 +88,7 @@ const stackWith = (extra: Record) => */ const rows: Array<{ label: string; config: Record; message: string }> = [ { - label: 'hooks[].object (#14122 §4 rule R4)', + label: 'hooks[].object (the hook-ownership rule)', config: { hooks: [{ name: 'probe_hook', object: MISSING, events: ['afterInsert'], handler: 'noop' }], }, @@ -135,7 +135,7 @@ const rows: Array<{ label: string; config: Record; message: str }, ]; -describe('#14552 — defineStack cross-reference refusals carry an ADR-0112 envelope', () => { +describe('defineStack cross-reference refusals carry an ADR-0112 envelope', () => { for (const row of rows) { describe(row.label, () => { it('refuses with code STACK_CROSS_REFERENCE_INVALID and status 422', () => { diff --git a/packages/spec/src/stack-dev-logins.test.ts b/packages/spec/src/stack-dev-logins.test.ts index 6d6c1733dc4..00d84a2cf40 100644 --- a/packages/spec/src/stack-dev-logins.test.ts +++ b/packages/spec/src/stack-dev-logins.test.ts @@ -68,7 +68,7 @@ const issuesOf = (verdict: ReturnType): string[] => // ─── GREEN — what is writable now, and was not before ─────────────── -describe('#17556 accept — an application may declare its own first-run credentials', () => { +describe('accept — an application may declare its own first-run credentials', () => { it('accepts a full `devLogins` entry and carries every field through the parse', () => { const verdict = parse({ ...base(), @@ -113,7 +113,7 @@ describe('#17556 accept — an application may declare its own first-run credent // ─── RED — the entry is strict from birth, and says so usefully ───── -describe('#17556 refuse — a `devLogins` entry is closed against unknown keys', () => { +describe('refuse — a `devLogins` entry is closed against unknown keys', () => { it('refuses an undeclared key inside an entry, at the entry`s path', () => { const verdict = parse({ ...base(), devLogins: [{ email: 'a@b.example', totallyBogus: 1 }] }); expect(verdict.success).toBe(false); @@ -150,7 +150,7 @@ describe('#17556 refuse — a `devLogins` entry is closed against unknown keys', // ─── DARK CONTROL — the door did not open, two keys were declared ─── -describe('#17556 control — the top-level door is still strict everywhere else', () => { +describe('control — the top-level door is still strict everywhere else', () => { it('a neighbouring undeclared key still refuses, so the accept above is about these two keys', () => { // If this went green the reading "devHint/devLogins are now writable" would // be indistinguishable from "the strict close regressed". @@ -171,7 +171,7 @@ describe('#17556 control — the top-level door is still strict everywhere else' // ─── COMPOSITION — both publishers' personas survive; hints refuse ── -describe('#17556 compose — personas concatenate, a contradicting hint is named', () => { +describe('compose — personas concatenate, a contradicting hint is named', () => { const hiring = () => defineStack({ manifest, devHint: 'seed first', diff --git a/packages/spec/src/stack-email-template-locale-floor.test.ts b/packages/spec/src/stack-email-template-locale-floor.test.ts index d9222c9e995..449e70b29c9 100644 --- a/packages/spec/src/stack-email-template-locale-floor.test.ts +++ b/packages/spec/src/stack-email-template-locale-floor.test.ts @@ -63,7 +63,7 @@ afterEach(() => { vi.restoreAllMocks(); }); -describe('#17614 — the floor tag is one named constant, not two spellings', () => { +describe('the floor tag is one named constant, not two spellings', () => { it('is the schema default for `locale`, so a row that omits the key HAS the floor', () => { expect(EMAIL_TEMPLATE_FLOOR_LOCALE).toBe('en-US'); const parsed = EmailTemplateDefinitionSchema.parse({ @@ -90,7 +90,7 @@ describe('#17614 — the floor tag is one named constant, not two spellings', () // A published declaration promising a loud permanent refusal where the // runtime performs a silent fill is the defect; both call shapes must stay // named, so the promise cannot quietly go unconditional again. - it('[#18056] scopes the dead-letter promise to a call that NAMES a locale, and states the other case', () => { + it('scopes the dead-letter promise to a call that NAMES a locale, and states the other case', () => { const text = String(EmailTemplateDefinitionSchema.shape.locale.description ?? ''); expect(text).toMatch(/NAMES a locale/); expect(text).toMatch(/lowest locale tag/); @@ -99,7 +99,7 @@ describe('#17614 — the floor tag is one named constant, not two spellings', () }); }); -describe('#17614 — defineStack reports a bundle with no `en-US` floor', () => { +describe('defineStack reports a bundle with no `en-US` floor', () => { it('reports the trap: every supportedLocales tag authored, none of them the floor', () => { const { warns, value } = warningsOf(stack(['en', 'zh-CN', 'ja-JP', 'es-ES'].map((l) => tpl(l)), THE_TRAP)); const hits = floorWarns(warns); @@ -130,7 +130,7 @@ describe('#17614 — defineStack reports a bundle with no `en-US` floor', () => }); }); -describe('#17614 — and stays silent where the bundle HAS a floor (the controls)', () => { +describe('and stays silent where the bundle HAS a floor (the controls)', () => { // ⛔ Every case in THIS block is a bundle that genuinely carries the floor // row. The shapes that are floorless and silent anyway are the guard's scope // boundary and live in their own block below — filing them here read as @@ -156,7 +156,7 @@ describe('#17614 — and stays silent where the bundle HAS a floor (the controls }); -describe('#17614 — warn-once bookkeeping', () => { +describe('the no-floor report: warn-once bookkeeping', () => { it('warns once for one bundle, however many times the same stack is defined', () => { const first = warningsOf(stack([tpl('pt-BR')], { defaultLocale: 'pt-BR', supportedLocales: ['pt-BR'] })); const second = warningsOf(stack([tpl('pt-BR')], { defaultLocale: 'pt-BR', supportedLocales: ['pt-BR'] })); @@ -176,7 +176,7 @@ describe('#17614 — warn-once bookkeeping', () => { // enforce-or-remove question and is not decided here; what is closed is the // silence being undeclared and unpinned. -describe('#18056 — the guard\'s declared scope boundary', () => { +describe('the floor guard\'s declared scope boundary', () => { it('early return 1: a stack with no `i18n` block is never examined, floorless or not', () => { const { warns, value } = warningsOf(stack([tpl('en', 'acme.scope_no_i18n')])); expect(floorWarns(warns)).toEqual([]); diff --git a/packages/spec/src/stack-inline-action-crossref.test.ts b/packages/spec/src/stack-inline-action-crossref.test.ts index ed92e566762..af589c52bda 100644 --- a/packages/spec/src/stack-inline-action-crossref.test.ts +++ b/packages/spec/src/stack-inline-action-crossref.test.ts @@ -122,7 +122,7 @@ function refusals(config: unknown): string[] { } } -describe('defineStack — inline action cross-references: modal targets (#6889)', () => { +describe('defineStack — inline action cross-references: modal targets', () => { it('rejects a dangling inline modal target (probe row E) with the registered rule\'s wording', () => { expect(refusals(inlineStack({ name: 'probe_new_task', type: 'modal', target: 'probe_nowhere' }))).toEqual([ "Inline action 'probe_new_task' on page 'probe_home' (regions.0.components.0) " @@ -130,7 +130,7 @@ describe('defineStack — inline action cross-references: modal targets (#6889)' ]); }); - it('rejects an inline modal target naming an OBJECT — #6739 ruling A, a modal target names a page (probe row D)', () => { + it('rejects an inline modal target naming an OBJECT — a modal target names a page, only (probe row D)', () => { expect(refusals(inlineStack({ name: 'probe_new_task', type: 'modal', target: 'probe_task' }))).toEqual([ "Inline action 'probe_new_task' on page 'probe_home' (regions.0.components.0) " + "references page 'probe_task' (via modal target) which is not defined in pages.", @@ -159,7 +159,7 @@ describe('defineStack — inline action cross-references: modal targets (#6889)' }); }); -describe('defineStack — inline action cross-references: flow targets (#6889)', () => { +describe('defineStack — inline action cross-references: flow targets', () => { it('rejects an inline flow target that names no declared flow', () => { expect(refusals(inlineStack({ name: 'probe_run', type: 'flow', target: 'probe_nowhere' }, { flows }))).toEqual([ "Inline action 'probe_run' on page 'probe_home' (regions.0.components.0) " @@ -179,7 +179,7 @@ describe('defineStack — inline action cross-references: flow targets (#6889)', }); }); -describe('defineStack — inline action cross-references: the traversal itself (#6889)', () => { +describe('defineStack — inline action cross-references: the traversal itself', () => { it('reaches a button nested inside a container\'s children and reports its path', () => { const config = { manifest: baseManifest, @@ -261,7 +261,7 @@ describe('defineStack — inline action cross-references: the traversal itself ( }); }); -describe('defineStack — inline action cross-references: what the walk must NOT refuse (#6889)', () => { +describe('defineStack — inline action cross-references: what the walk must NOT refuse', () => { it.each([ ['form', { name: 'probe_form', type: 'form', target: 'probe_task.edit' }], ['url', { name: 'probe_url', type: 'url', target: '/environments' }], @@ -319,7 +319,7 @@ const registeredStack = (action: unknown, extra: Record = {}) = const modalAction = (target: string) => ({ name: 'probe_new_task', label: 'New', type: 'modal' as const, target }); const flowAction = (target: string) => ({ name: 'probe_run', label: 'Run', type: 'flow' as const, target }); -describe('defineStack — object-embedded action cross-references: modal targets (#7397)', () => { +describe('defineStack — object-embedded action cross-references: modal targets', () => { it('rejects a dangling embedded modal target (probe row b) with the registered rule\'s wording', () => { expect(refusals(embeddedStack(modalAction('probe_nowhere')))).toEqual([ "Action 'probe_new_task' on object 'probe_task' " @@ -327,7 +327,7 @@ describe('defineStack — object-embedded action cross-references: modal targets ]); }); - it('rejects an embedded modal target naming an OBJECT — #6739 ruling A, a modal target names a page (probe row d)', () => { + it('rejects an embedded modal target naming an OBJECT — a modal target names a page, only (probe row d)', () => { expect(refusals(embeddedStack(modalAction('probe_task')))).toEqual([ "Action 'probe_new_task' on object 'probe_task' " + "references page 'probe_task' (via modal target) which is not defined in pages.", @@ -348,7 +348,7 @@ describe('defineStack — object-embedded action cross-references: modal targets }); }); -describe('defineStack — object-embedded action cross-references: flow targets (#7397)', () => { +describe('defineStack — object-embedded action cross-references: flow targets', () => { it('rejects an embedded flow target that names no declared flow (probe row c)', () => { expect(refusals(embeddedStack(flowAction('probe_nowhere'), { flows }))).toEqual([ "Action 'probe_run' on object 'probe_task' " @@ -365,7 +365,7 @@ describe('defineStack — object-embedded action cross-references: flow targets }); }); -describe('defineStack — object-embedded action cross-references: objectName → object (#7456)', () => { +describe('defineStack — object-embedded action cross-references: objectName → object', () => { const dangling = { name: 'probe_on', label: 'On', type: 'script' as const, target: 'doThing', objectName: 'probe_missing' }; it('rejects a dangling embedded objectName (probe row k) with the registered rule\'s wording, subject adjusted to the owning object', () => { @@ -396,12 +396,12 @@ describe('defineStack — object-embedded action cross-references: objectName expect(refusals(config)).toEqual([]); }); - it('leaves an embedded action with no objectName alone — unchanged from before #7456', () => { + it('leaves an embedded action with no objectName alone — unchanged from before the dangling-`objectName` refusal', () => { expect(refusals(embeddedStack({ name: 'probe_on', label: 'On', type: 'script' as const, target: 'doThing' }))).toEqual([]); }); }); -describe('defineStack — object-embedded action cross-references: the b/f, c/g, d/i splits (#7397)', () => { +describe('defineStack — object-embedded action cross-references: the b/f, c/g, d/i splits', () => { it.each([ ['modal → nothing (rows b/f)', modalAction('probe_nowhere')], ['modal → object (rows d/i)', modalAction('probe_task')], @@ -420,7 +420,7 @@ describe('defineStack — object-embedded action cross-references: the b/f, c/g, }); }); -describe('defineStack — object-embedded action cross-references: the traversal itself (#7397)', () => { +describe('defineStack — object-embedded action cross-references: the traversal itself', () => { it('labels each offender with ITS OWN object, not a fixed subject', () => { const config = { manifest: baseManifest, @@ -497,7 +497,7 @@ describe('defineStack — object-embedded action cross-references: the traversal }); }); -describe('defineStack — object-embedded action cross-references: what the walk must NOT refuse (#7397)', () => { +describe('defineStack — object-embedded action cross-references: what the walk must NOT refuse', () => { it.each([ ['form', { name: 'probe_form', label: 'Form', type: 'form', target: 'probe_task.edit' }], ['url', { name: 'probe_url', label: 'Url', type: 'url', target: '/environments' }], diff --git a/packages/spec/src/stack-json-stage-package-body.test.ts b/packages/spec/src/stack-json-stage-package-body.test.ts index 359b1ba7081..6575c0b2c39 100644 --- a/packages/spec/src/stack-json-stage-package-body.test.ts +++ b/packages/spec/src/stack-json-stage-package-body.test.ts @@ -111,7 +111,7 @@ const RECORD_BODY = { hooks: [{ name: 'on_insert', object: 'task', events: ['beforeInsert' as const] }], }; -describe('#17518 the two JSON stages CONVERT, which is the whole point of declaring them', () => { +describe('the two JSON stages CONVERT, which is the whole point of declaring them', () => { it('both new bodies convert under `z.toJSONSchema` — over the WHOLE body, not two members', () => { // Stated over the whole body on purpose: the tax this closes is paid by // EMBEDDERS, and an embedder loses its JSON Schema to any one @@ -144,7 +144,7 @@ describe('#17518 the two JSON stages CONVERT, which is the whole point of declar }); }); -describe('#17518 the three stages have the SAME key set — they narrow, they do not drop', () => { +describe('the three stages have the SAME key set — they narrow, they do not drop', () => { it('artifact and record carry every member the assembled body carries', () => { const assembled = shapeKeys(AssembledPackageBodySchema); expect(shapeKeys(ArtifactStagePackageBodySchema)).toEqual(assembled); @@ -183,7 +183,7 @@ describe('#17518 the three stages have the SAME key set — they narrow, they do }); }); -describe('#17518 each stage accepts ITS OWN payload and refuses the neighbouring ones', () => { +describe('each stage accepts ITS OWN payload and refuses the neighbouring ones', () => { it('assembled accepts the live composed body; both JSON stages refuse it', () => { expect(AssembledPackageBodySchema.safeParse(IN_MEMORY_BODY).success).toBe(true); expect(ArtifactStagePackageBodySchema.safeParse(IN_MEMORY_BODY).success).toBe(false); @@ -218,7 +218,7 @@ describe('#17518 each stage accepts ITS OWN payload and refuses the neighbouring }); }); -describe('#17518 `effect` is READ off the declaration schema, never minted here', () => { +describe('`effect` is READ off the declaration schema, never minted here', () => { it('a lowered entry with no `effect` materialises the declaration default', () => { // `FlowFunctionDeclarationSchema.effect` is // `FlowFunctionEffectSchema.default(DEFAULT_FLOW_FUNCTION_EFFECT)` — a diff --git a/packages/spec/src/stack-refusal-envelopes.test.ts b/packages/spec/src/stack-refusal-envelopes.test.ts index ace7ac794af..83ac6aaa87d 100644 --- a/packages/spec/src/stack-refusal-envelopes.test.ts +++ b/packages/spec/src/stack-refusal-envelopes.test.ts @@ -153,7 +153,7 @@ const rows: Array<{ }, ]; -describe('#15963 — every defineStack refusal carries an ADR-0112 envelope', () => { +describe('every defineStack refusal carries an ADR-0112 envelope', () => { for (const row of rows) { describe(row.site, () => { it(`refuses with code ${row.code} and status 422`, () => { @@ -241,7 +241,7 @@ describe('#15963 — every defineStack refusal carries an ADR-0112 envelope', () } }); - it('every code is a member of the closed `ErrorCode` union, registered under @objectstack/spec (#16449)', () => { + it('every code is a member of the closed `ErrorCode` union, registered under @objectstack/spec', () => { // The #16404 ruling: a code that ships in `dist` is the published face, // door or no door — so each refusal's spelling is a ledger row, and a // consumer's `switch (e.code)` is exhaustive over the union it ships with. diff --git a/packages/spec/src/stack-requires.test.ts b/packages/spec/src/stack-requires.test.ts index d83c7fa8cfe..3d108f0a100 100644 --- a/packages/spec/src/stack-requires.test.ts +++ b/packages/spec/src/stack-requires.test.ts @@ -7,7 +7,7 @@ import { defineStack } from './stack.zod'; // deprecated `aiStudio`/`aiSeat` aliases were removed in #3308, so those now // reject like any other typo — there is no canonicalization step left. -describe('defineStack requires validation (#3265/#3308)', () => { +describe('defineStack requires validation', () => { it('canonical declarations pass through untouched', () => { const stack = defineStack({ requires: ['ai', 'ai-studio', 'ai-seat', 'hierarchy-security', 'governance'] }); expect(stack.requires).toEqual(['ai', 'ai-studio', 'ai-seat', 'hierarchy-security', 'governance']); @@ -19,7 +19,7 @@ describe('defineStack requires validation (#3265/#3308)', () => { ); }); - it('the removed camelCase aliases now REJECT like any other unknown token (#3308)', () => { + it('the removed camelCase aliases now REJECT like any other unknown token', () => { expect(() => defineStack({ requires: ['aiStudio'] })).toThrowError( /'aiStudio' is not a known platform capability/, ); @@ -59,7 +59,7 @@ describe('defineStack requires validation (#3265/#3308)', () => { // and never fires. The refusal reuses the automation engine's boot-audit // wording (flow name, resolved trigger kind, the exact remedy). -describe('defineStack trigger capability validation (#14153)', () => { +describe('defineStack trigger capability validation', () => { const node = (id: string, type: string, config?: Record) => ({ id, type, @@ -222,7 +222,7 @@ describe('defineStack trigger capability validation (#14153)', () => { // prescription literally and asserts the result is ACCEPTED — the property // the neither-arm exists for. -describe('defineStack trigger capability — the pair: `triggers` without `automation` (#20332)', () => { +describe('defineStack trigger capability — the pair: `triggers` without `automation`', () => { type Envelope = Error & { code?: string; status?: number; issues?: readonly string[] }; const refusalOf = (stack: Record): Envelope | null => { try { diff --git a/packages/spec/src/stack-top-level-strict.test.ts b/packages/spec/src/stack-top-level-strict.test.ts index 5d06b5e4ba9..ee725b9bd17 100644 --- a/packages/spec/src/stack-top-level-strict.test.ts +++ b/packages/spec/src/stack-top-level-strict.test.ts @@ -47,7 +47,7 @@ const legalStack = () => ({ const parseTopLevel = (raw: Record) => ObjectStackDefinitionSchema.safeParse(raw); -describe('#8687 — unknown top-level stack keys are refused at parse', () => { +describe('unknown top-level stack keys are refused at parse', () => { it("inverts the card's measured control: the three bogus keys now FAIL parse instead of adding zero warnings", () => { // Measured on 17.0.0 GA: each of these parsed `success: true` with the key // silently dropped, and injecting all three into a real app config added @@ -125,7 +125,7 @@ describe('#8687 — unknown top-level stack keys are refused at parse', () => { }); }); -describe('#10485 — the `themes` carrier is retired (ADR-0049; ruled 退役授权面 2026-08-21)', () => { +describe('the `themes` carrier is retired (ADR-0049; ruled 退役授权面 2026-08-21)', () => { // A theme body that parsed green on 17.0 — the exact authoring the issue // measured shipping end-to-end while changing nothing on screen. const previouslyAcceptedThemes = [ @@ -170,7 +170,7 @@ describe('#10485 — the `themes` carrier is retired (ADR-0049; ruled 退役授 }); }); -describe('#8687 — the accept side does not move', () => { +describe('the strict top-level door: the accept side does not move', () => { it('accepts every declared top-level key', () => { // Structural sweep: a declared key must never be refused as unknown. All // 40+ top-level keys are optional (tombstones included), so presence with @@ -212,7 +212,7 @@ describe('#8687 — the accept side does not move', () => { }); }); -describe('#8687 — one voice: the lint yields to the strict parse', () => { +describe('one voice: the lint yields to the strict parse', () => { it('lintUnknownStackKeys goes quiet on the now-strict stack schema (its own posture rule)', () => { // The graduation day the lint's docblock always promised: a strict schema // rejects loudly on its own, so the lint must not become a second, @@ -222,7 +222,7 @@ describe('#8687 — one voice: the lint yields to the strict parse', () => { }); }); -describe('#8687 — defineStack surfaces the refusal', () => { +describe('defineStack surfaces the unknown-top-level-key refusal', () => { it('throws with the curated message, did-you-mean included', () => { expect(() => defineStack({ objectz: [] } as never)).toThrowError( /Unrecognized key\(s\) on this stack definition: `objectz`\. Did you mean `objectz` → `objects`\?/, diff --git a/packages/spec/src/stack.test.ts b/packages/spec/src/stack.test.ts index 9a2258cade6..5022365e255 100644 --- a/packages/spec/src/stack.test.ts +++ b/packages/spec/src/stack.test.ts @@ -562,7 +562,7 @@ describe('defineStack - Seed Data Cross-Reference Validation', () => { }); }); -describe('defineStack - Mapping Cross-Reference Validation (#2611)', () => { +describe('defineStack - Mapping Cross-Reference Validation', () => { const baseManifest = { id: 'com.example.test', name: 'test-project', @@ -1507,7 +1507,7 @@ describe('defineStack — ADR-0087 D2 conversion notices', () => { }); }); -describe('defineStack — the RETIRED `type: page` view mount (#17063)', () => { +describe('defineStack — the RETIRED `type: page` view mount', () => { const baseManifest = { id: 'com.example.test', name: 'test-project',