diff --git a/packages/spec/src/contracts/action-confirmation-contract.pin.test.ts b/packages/spec/src/contracts/action-confirmation-contract.pin.test.ts index 00f627f8f6e..8cad375f1e9 100644 --- a/packages/spec/src/contracts/action-confirmation-contract.pin.test.ts +++ b/packages/spec/src/contracts/action-confirmation-contract.pin.test.ts @@ -60,7 +60,7 @@ const OWNER = '@objectstack/runtime'; const asDetails = (d: ActionConfirmationRequiredDetails) => d; const asConfirmation = (c: AIActionConfirmation) => c; -describe('action-confirmation contract (#16293)', () => { +describe('action-confirmation contract — an unconfirmed gated action is refused', () => { it('the refusal code is ADMITTED by the closed `ErrorCode` union', () => { expect(ErrorCode.parse(CODE)).toBe(CODE); // Control: the union is closed, so a one-character near-miss is refused. diff --git a/packages/spec/src/contracts/approval-service.test.ts b/packages/spec/src/contracts/approval-service.test.ts index a3a7e9281cf..44472f92ecc 100644 --- a/packages/spec/src/contracts/approval-service.test.ts +++ b/packages/spec/src/contracts/approval-service.test.ts @@ -20,7 +20,7 @@ import type { IApprovalService, } from './approval-service'; -describe('approval row organization_id declaration (#10331)', () => { +describe('approval rows declare the organization_id they are stamped with', () => { it('is readable off ApprovalRequestRow without a cast, at the stamped shape', () => { // Reading the property off the declared type — no `as`, no indexing // through `any`. This line failing to compile is the regression. @@ -87,7 +87,7 @@ export type ActedAsIsOptional = Assert<{} extends Pick>; -describe('[#21458] ApprovalActionRow.acted_as — the slot an approval action was taken as', () => { +describe('ApprovalActionRow.acted_as — the slot an approval action was taken as', () => { it('is optional and string-typed: a row without it still conforms, and one with it reads back', () => { const read = (row: ApprovalActionRow): string | undefined => row.acted_as; @@ -187,7 +187,7 @@ const minimalService = (): IApprovalService => ({ listActions: async () => [], }); -describe('[#15389] continueRestoredRun — the approvals operator repair verb, declared', () => { +describe('continueRestoredRun — the approvals operator repair verb, declared', () => { it('is optional: the minimal implementation still conforms and has no operator door', () => { const service = minimalService(); diff --git a/packages/spec/src/contracts/automation-context-caller-param-keys.pin.test.ts b/packages/spec/src/contracts/automation-context-caller-param-keys.pin.test.ts index 1cad94512f7..71fdb76e8f0 100644 --- a/packages/spec/src/contracts/automation-context-caller-param-keys.pin.test.ts +++ b/packages/spec/src/contracts/automation-context-caller-param-keys.pin.test.ts @@ -46,7 +46,7 @@ export const contextSupplyingSubject: AutomationContext = { // @ts-expect-error — a per-key boolean map is not the shape: the key lists names. export const contextWithAMap: AutomationContext = { params: { subject: 'x' }, callerParamKeys: { subject: true } }; -describe('[#19846] AutomationContext.callerParamKeys', () => { +describe('AutomationContext.callerParamKeys — the keys the caller supplied', () => { it('reads back absent, empty and populated as three different values', () => { expect('callerParamKeys' in contextWithoutTheKey).toBe(false); expect(contextSupplyingNothing.callerParamKeys).toEqual([]); diff --git a/packages/spec/src/contracts/automation-context-record-load-denied.pin.test.ts b/packages/spec/src/contracts/automation-context-record-load-denied.pin.test.ts index ab5276b87d0..ece5f816d1e 100644 --- a/packages/spec/src/contracts/automation-context-record-load-denied.pin.test.ts +++ b/packages/spec/src/contracts/automation-context-record-load-denied.pin.test.ts @@ -69,7 +69,7 @@ export const contextWithTheKey: AutomationContext = { record: { id: 'rec-1' }, o // @ts-expect-error — `false` is not a member: the key is ABSENT, never `false` (handler-face convention, mirrored). export const contextWithFalse: AutomationContext = { record: { id: 'rec-1' }, object: 'crm_deal', recordLoadDenied: false }; -describe('[#14244] AutomationContext.recordLoadDenied mirrors the producer signal', () => { +describe('AutomationContext.recordLoadDenied mirrors the producer signal', () => { it('reads the key back as exactly `true`, and its absence as `undefined` (anti-vacuity)', () => { expect(contextWithTheKey.recordLoadDenied).toBe(true); expect(contextWithoutTheKey.recordLoadDenied).toBeUndefined(); diff --git a/packages/spec/src/contracts/automation-result-status.pin.test.ts b/packages/spec/src/contracts/automation-result-status.pin.test.ts index 4e4a939462a..8f5294b2d34 100644 --- a/packages/spec/src/contracts/automation-result-status.pin.test.ts +++ b/packages/spec/src/contracts/automation-result-status.pin.test.ts @@ -83,7 +83,7 @@ export type WireStatusMatchesContract = Assert< Eq< WireStatus, ContractStatus > /** The wire enum, unwrapped from `.optional()` through the `lazySchema` Proxy. */ const wireStatusEnum = TriggerFlowResponseSchema.shape.data.shape.status.unwrap(); -describe('[#14384] AutomationResult.status names the stranded run', () => { +describe('AutomationResult.status names the stranded run', () => { it('reads a non-empty membership (anti-vacuity)', () => { expect(AUTOMATION_RESULT_STATUSES.length).toBe(5); expect(wireStatusEnum.options.length).toBeGreaterThan(0); @@ -93,7 +93,7 @@ describe('[#14384] AutomationResult.status names the stranded run', () => { expect([...wireStatusEnum.options]).toEqual([...AUTOMATION_RESULT_STATUSES]); }); - it("names the terminally-failed-but-repairable run 'stranded' (#13937 shape 4)", () => { + it("names the terminally-failed-but-repairable run 'stranded'", () => { expect(AUTOMATION_RESULT_STATUSES).toContain('stranded'); expect(wireStatusEnum.options).toContain('stranded'); }); @@ -115,7 +115,7 @@ describe('[#14384] AutomationResult.status names the stranded run', () => { expect(parsed.data.runId).toBe('run_stranded_001'); }); - it("names the refused run 'refused' (#14945) — beside `'failed'`, never folded into it", () => { + it("names the refused run 'refused' — beside `'failed'`, never folded into it", () => { expect(AUTOMATION_RESULT_STATUSES).toContain('refused'); expect(wireStatusEnum.options).toContain('refused'); expect(wireStatusEnum.options).toContain('failed'); diff --git a/packages/spec/src/contracts/automation-service.test.ts b/packages/spec/src/contracts/automation-service.test.ts index 9848ac8005c..75b13be2632 100644 --- a/packages/spec/src/contracts/automation-service.test.ts +++ b/packages/spec/src/contracts/automation-service.test.ts @@ -302,7 +302,7 @@ describe('Automation Service Contract', () => { // `verb(runId)` shorthand), and their docblocks carry the ruling's // persistent-face statement. The type-level identities are the exported // aliases above the suite; the compile of the literals below is the rest. - describe('[#16495] cancelRun / restoreConsumedSuspension — the operator verbs, declared', () => { + describe('cancelRun / restoreConsumedSuspension — the operator verbs, declared', () => { it('are optional: the minimal implementation still conforms and has no operator door', () => { const service: IAutomationService = { execute: async () => ({ success: true }), @@ -419,7 +419,7 @@ describe('Automation Service Contract', () => { * passes these rows to Studio verbatim, so a shape with no reason field made a * policy-disabled flow indistinguishable from a broken binding on the wire. */ -describe('FlowRuntimeState — the unbound reason (#18235)', () => { +describe('FlowRuntimeState — carries the reason a flow is unbound', () => { it('a row that explains itself and one that does not both satisfy the contract', () => { // PROBE: the reason-carrying row, in the shape the engine emits for a flow // the deployment switch refused. diff --git a/packages/spec/src/contracts/confirmed-blueprint-identity-contract.pin.test.ts b/packages/spec/src/contracts/confirmed-blueprint-identity-contract.pin.test.ts index 7d011893e94..920fa0e787d 100644 --- a/packages/spec/src/contracts/confirmed-blueprint-identity-contract.pin.test.ts +++ b/packages/spec/src/contracts/confirmed-blueprint-identity-contract.pin.test.ts @@ -49,7 +49,7 @@ const asOptions = (o: ChatWithToolsOptions) => o; /** A plausible digest — the shape cloud stamps, opaque to this contract. */ const DIGEST = 'sha256:3f6a1c0e9b2d4a7f8c5e1b0d9a2f4c6e8b0d3a5f7c9e1b3d5a7f9c1e3b5d7a9f'; -describe('confirmedBlueprintIdentity contract (#15937)', () => { +describe('confirmedBlueprintIdentity — declared on the protocol ToolExecutionContext', () => { it('is declared on `ToolExecutionContext` and round-trips the digest', () => { const ctx = asCtx({ actor: { id: 'usr_1' }, diff --git a/packages/spec/src/contracts/core-service-contracts.test.ts b/packages/spec/src/contracts/core-service-contracts.test.ts index 75039301d06..2771355a603 100644 --- a/packages/spec/src/contracts/core-service-contracts.test.ts +++ b/packages/spec/src/contracts/core-service-contracts.test.ts @@ -24,7 +24,7 @@ import type { IShareLinkService } from './share-link-service'; type Expect = T; type Equals = (() => G extends A ? 1 : 2) extends (() => G extends B ? 1 : 2) ? true : false; -describe('CoreServiceName → contract map (#4127)', () => { +describe('CoreServiceName → contract map', () => { it('maps every key to a declared CoreServiceName slot', () => { // The map's keys are checked against the enum at compile time below; // this asserts the same thing at runtime so a rename shows up as a @@ -70,7 +70,7 @@ describe('CoreServiceName → contract map (#4127)', () => { }); }); -describe('slot → contract ledger beyond the enum (#4127 batch 3)', () => { +describe('slot → contract ledger beyond the enum', () => { it('keeps every core binding', () => { // The extension must not shadow or drop a core entry — `data` staying // `IDataEngine` is what makes the `objectql` alias below meaningful. @@ -96,7 +96,7 @@ describe('slot → contract ledger beyond the enum (#4127 batch 3)', () => { expect(true).toBe(true); }); - it('resolves objectql to the FULL engine contract, a strict widening of data (#4251 B3)', () => { + it('resolves objectql to the FULL engine contract, a strict widening of data', () => { // Same instance, two views: `data` is the engine as IDataEngine (the // data plane), `objectql` is the whole engine. The subtype relation is // the claim that they cannot drift apart — every IObjectQLEngine IS an diff --git a/packages/spec/src/contracts/data-driver.test.ts b/packages/spec/src/contracts/data-driver.test.ts index 4698cad35e5..e7d14580314 100644 --- a/packages/spec/src/contracts/data-driver.test.ts +++ b/packages/spec/src/contracts/data-driver.test.ts @@ -287,7 +287,7 @@ describe('IDataDriver', () => { // unused directive is itself an error, so `pnpm --filter @objectstack/spec // typecheck` goes red on regression in either direction. - describe('introspectSchema (#11493)', () => { + describe('introspectSchema — an optional driver member at the spec shape', () => { /** The declared return type, read off the CONTRACT rather than re-spelled. */ type DriverIntrospection = Awaited>>; diff --git a/packages/spec/src/contracts/data-engine.test.ts b/packages/spec/src/contracts/data-engine.test.ts index dcb250dc5ae..4f558a56578 100644 --- a/packages/spec/src/contracts/data-engine.test.ts +++ b/packages/spec/src/contracts/data-engine.test.ts @@ -213,7 +213,7 @@ describe('Data Engine Contract', () => { * `IDataEngine[…]`, so nothing here can drift from the contract by being * modelled beside it. */ - describe('the narrowed verb declarations are pinned, not just guarded (#16231)', () => { + describe('the narrowed verb declarations are pinned, not just guarded', () => { type FindOneAnswer = Awaited>; type UpdateAnswer = Awaited>; type DeleteAnswer = Awaited>; @@ -266,7 +266,7 @@ describe('Data Engine Contract', () => { * re-opening Option A or has moved the member, and either way it is a * maintainer decision, not a merge conflict to resolve by hand. */ - describe('strictReadonlyWrites stays OFF the serializable options bags (#5126)', () => { + describe('strictReadonlyWrites stays OFF the serializable options bags', () => { const shapeKeys = (schema: unknown): string[] => Object.keys((schema as { shape: Record }).shape); @@ -452,7 +452,7 @@ describe('Data Engine Contract', () => { // it). The value-level optionality evidence already exists above: every // pre-existing minimal `IDataEngine` literal in this file omits // `introspectDatasource` and compiles. - describe('introspectDatasource (#11493)', () => { + describe('introspectDatasource — answers the spec introspection shape', () => { type Member = IDataEngine['introspectDatasource']; type EngineIntrospection = Awaited>>; @@ -511,7 +511,7 @@ describe('Data Engine Contract', () => { // file, which omit all five and compile); every directive below is resolved // by tsc, so reverting a member makes its `@ts-expect-error` unused, and an // unused directive is itself an error. - describe('datasource resolution members (#12248, #11833 fork 1)', () => { + describe('datasource resolution members — declared, and optional', () => { type ResolveMember = IDataEngine['resolveEffectiveDatasource']; type DriverMember = IDataEngine['getDriverForObject']; @@ -572,7 +572,7 @@ describe('Data Engine Contract', () => { }); }); - describe('datasource lifecycle members (#12248, #12010, #12805 via the #11833 ruling item 4)', () => { + describe('datasource lifecycle members — declared at the shape the engine keeps', () => { type RegisterMember = IDataEngine['registerDatasourceDef']; type ListMember = IDataEngine['listDatasourceDefs']; type MarkMember = IDataEngine['markDatasourceUnavailable']; @@ -676,7 +676,7 @@ describe('Data Engine Contract', () => { }); }); - describe('syncObjectSchema (#12482 — the #12010 "not verified" member, via the #11833 ruling item-4 precedent)', () => { + describe('syncObjectSchema — declared, since two services already call it', () => { type SyncMember = IDataEngine['syncObjectSchema']; it('is optional — only engines owning drivers and DDL answer', () => { diff --git a/packages/spec/src/contracts/email-service.test.ts b/packages/spec/src/contracts/email-service.test.ts index 715fd4a97b3..afbabe7d042 100644 --- a/packages/spec/src/contracts/email-service.test.ts +++ b/packages/spec/src/contracts/email-service.test.ts @@ -17,7 +17,7 @@ import type { SendEmailInput, SendTemplateInput } from './email-service'; * BOTH `SendEmailInput` and `SendTemplateInput` (the template entry point * forwards it into the send it performs). */ -describe('Email Service Contract — organization widening (#11741)', () => { +describe('Email Service Contract — organization widening', () => { it('accepts the pre-widening SendEmailInput shape unchanged (organizationId optional, absent legal)', () => { const legacy: SendEmailInput = { to: 'a@b.com', subject: 'Hi', text: 'x' }; expect(legacy).not.toHaveProperty('organizationId'); @@ -60,7 +60,7 @@ describe('Email Service Contract — organization widening (#11741)', () => { * itself a compile error (TS2578) under `check:test-typecheck` — the pin fails * loudly in both directions. */ -describe('Email Service Contract — SendTemplateInput.org retired (#11832)', () => { +describe('Email Service Contract — SendTemplateInput.org retired', () => { it('refuses `org` at compile time (excess property; organizationId is NOT an overlay opt-in)', () => { const input: SendTemplateInput = { template: 'auth.password_reset', diff --git a/packages/spec/src/contracts/http-server.test.ts b/packages/spec/src/contracts/http-server.test.ts index e5a517da8dc..743c937bdd6 100644 --- a/packages/spec/src/contracts/http-server.test.ts +++ b/packages/spec/src/contracts/http-server.test.ts @@ -180,7 +180,7 @@ describe('HTTP Server Contract', () => { await expect(server.close!()).resolves.toBeUndefined(); }); - describe('optional setFallbackHandler (#5040 E1)', () => { + describe('optional setFallbackHandler — a not-found hook, not a wildcard route', () => { /** A server with only the REQUIRED members. */ const baseServer = (): IHttpServer => ({ get: () => {}, @@ -313,7 +313,7 @@ describe('HTTP Server Contract', () => { }); }); - describe('optional afterResponse (#9835)', () => { + describe('optional afterResponse — a transport-agnostic response observer', () => { /** A server with only the REQUIRED members. */ const baseServer = (): IHttpServer => ({ get: () => {}, @@ -344,7 +344,7 @@ describe('HTTP Server Contract', () => { expect(typeof server.afterResponse).toBe('function'); }); - it('a delegating wrapper that forwards only required members ERASES detection (#5122 shape)', () => { + it('a delegating wrapper that forwards only required members ERASES detection', () => { const underlying: IHttpServer = { ...baseServer(), afterResponse: (_observer) => {}, diff --git a/packages/spec/src/contracts/job-service.test.ts b/packages/spec/src/contracts/job-service.test.ts index 746a11f40e0..4161d9f978a 100644 --- a/packages/spec/src/contracts/job-service.test.ts +++ b/packages/spec/src/contracts/job-service.test.ts @@ -123,7 +123,7 @@ describe('Job Service Contract', () => { * which reddens the `degraded` direction only, and leaves every legacy pin * green. That asymmetry IS additivity. */ -describe('[#6617] JobHandler degraded-outcome channel', () => { +describe('JobHandler degraded-outcome channel — optional and additive', () => { /** * The handler type EXACTLY as it stood before #6617. Pinning it as a * standalone declaration is what makes the additivity claim falsifiable: @@ -260,7 +260,7 @@ describe('[#6617] JobHandler degraded-outcome channel', () => { * signature back to `(name, data?)` — (b), (c) and the identity pin go red, * (a) stays green. That asymmetry IS additivity. */ -describe('[#14766] IJobService.replay force option — contract half of the #14501 A+a2 ruling', () => { +describe('IJobService.replay force option — a succeeded window replays only when forced', () => { type Eq = (() => T extends A ? 1 : 2) extends (() => T extends B ? 1 : 2) ? true : false; type ReplayParams = Parameters>; diff --git a/packages/spec/src/contracts/metadata-service-roundtrip-conformance.test.ts b/packages/spec/src/contracts/metadata-service-roundtrip-conformance.test.ts index c8577a78a1f..10957085dee 100644 --- a/packages/spec/src/contracts/metadata-service-roundtrip-conformance.test.ts +++ b/packages/spec/src/contracts/metadata-service-roundtrip-conformance.test.ts @@ -65,14 +65,14 @@ function assertRegisterContract(type: string, name: string, data: unknown): void const shape = data === null ? 'null' : Array.isArray(data) ? 'an array' : `a ${typeof data}`; throw registerRefusal( `IMetadataService.register('${type}', '${name}'): data is ${shape}, not a metadata document — ` + - `refused, never accepted-and-dropped or coerced into storability (#7378 row 3).`, + `refused, never accepted-and-dropped or coerced into storability.`, ); } const documentName = (data as { name?: unknown }).name; if (documentName !== undefined && documentName !== name) { throw registerRefusal( `IMetadataService.register('${type}', '${name}'): data.name is '${String(documentName)}', which disagrees ` + - `with the name argument '${name}' — refused, since silent resolution in either direction can misplace the item (#7378 row 1).`, + `with the name argument '${name}' — refused, since silent resolution in either direction can misplace the item.`, ); } } @@ -139,7 +139,7 @@ async function assertRefused(service: IMetadataService, testCase: MetadataRoundT () => undefined, (thrown: unknown) => thrown as Error & { code?: string; status?: number }, ); - expect(error, `register must REFUSE this write (#7378): ${testCase.id}`).toBeDefined(); + expect(error, `register must REFUSE this write: ${testCase.id}`).toBeDefined(); expect(error).toMatchObject({ code: StandardErrorCode.enum.VALIDATION_ERROR, status: 400, diff --git a/packages/spec/src/contracts/notification-service.test.ts b/packages/spec/src/contracts/notification-service.test.ts index 55ed84a5f73..2455939c359 100644 --- a/packages/spec/src/contracts/notification-service.test.ts +++ b/packages/spec/src/contracts/notification-service.test.ts @@ -150,7 +150,7 @@ describe('Notification Service Contract', () => { * Optional, and the first test is the reason: a send-only provider (SMTP, * Twilio, a Slack webhook) fills the slot legitimately with no inbox at all. */ - describe('inbox (#4127)', () => { + describe('inbox — declared on the contract, and optional', () => { it('keeps a send-only provider valid — the inbox trio is optional', () => { const sendOnly: INotificationService = { send: async () => ({ success: true }), diff --git a/packages/spec/src/contracts/objectql-engine-hook-scope.test.ts b/packages/spec/src/contracts/objectql-engine-hook-scope.test.ts index 44083855763..6a54753d34f 100644 --- a/packages/spec/src/contracts/objectql-engine-hook-scope.test.ts +++ b/packages/spec/src/contracts/objectql-engine-hook-scope.test.ts @@ -38,7 +38,7 @@ type Equals = (() => G extends A ? 1 : 2) extends (() => G extends B type RegisterHookOptions = NonNullable[2]>; -describe('[#5928] IObjectQLEngine.registerHook scope faces', () => { +describe('IObjectQLEngine.registerHook scope faces — global minus excluded objects', () => { it('declares `excludeObjects` in both accepted spellings', () => { // Fails to COMPILE if the declared type is anything else — `true` is not // assignable to `false`. diff --git a/packages/spec/src/contracts/objectql-engine.test.ts b/packages/spec/src/contracts/objectql-engine.test.ts index fb9ce17b77e..0b2f4db77e3 100644 --- a/packages/spec/src/contracts/objectql-engine.test.ts +++ b/packages/spec/src/contracts/objectql-engine.test.ts @@ -26,7 +26,7 @@ import type { ExecutionContext } from '../kernel/execution-context.zod'; * contract (`check:engine-double-contract` counts this file's doubles against * a shrink-only baseline, and a pin block is not a reason to grow it). */ -describe('getObject return contract (#12248, #11833 fork 3)', () => { +describe('getObject return contract — a structured answer, not `unknown`', () => { type EngineAnswer = ReturnType; type RegistryAnswer = ReturnType; @@ -103,7 +103,7 @@ describe('getObject return contract (#12248, #11833 fork 3)', () => { * the contract, no engine double is stood up, and on a revert to `unknown` the * consumer reads below stop compiling with no `@ts-expect-error` needed. */ -describe('getSchema return contract (#12481 — #12248 one member over, #11833 fork 3 by inheritance)', () => { +describe('getSchema return contract — the same answer as its alias getObject', () => { type SchemaAnswer = ReturnType; it('answers exactly the spec registered-object type', () => { @@ -160,7 +160,7 @@ describe('getSchema return contract (#12481 — #12248 one member over, #11833 f * Same discipline as the blocks above: member types read off the contract, no * engine double. */ -describe('judgeFilter contract (#20157, #19995 ruling C)', () => { +describe('judgeFilter contract — the engine judges a filter without running it', () => { type Member = IObjectQLEngine['judgeFilter']; it('is OPTIONAL: a caller must work with an engine that lacks it', () => { diff --git a/packages/spec/src/contracts/resume-failure-report.pin.test.ts b/packages/spec/src/contracts/resume-failure-report.pin.test.ts index f82aaf5f794..062150318e8 100644 --- a/packages/spec/src/contracts/resume-failure-report.pin.test.ts +++ b/packages/spec/src/contracts/resume-failure-report.pin.test.ts @@ -134,7 +134,7 @@ function interfaceDocblockOf(iface: string): string { return CONTRACT_SOURCE.slice(docStart, declaredAt); } -describe('[#16559] ResumeFailureReport — the resume failure a success answer carries (batch #76)', () => { +describe('ResumeFailureReport — the resume failure a success answer carries', () => { it('1. the wire schema parses a report and hands the three shared members back out (declared once, measured)', () => { // A strip-mode object drops undeclared keys silently and would parse // anything — so parse success alone proves nothing; the shared values diff --git a/packages/spec/src/contracts/schema-diff-service.test.ts b/packages/spec/src/contracts/schema-diff-service.test.ts index 2940842160b..a4126225c15 100644 --- a/packages/spec/src/contracts/schema-diff-service.test.ts +++ b/packages/spec/src/contracts/schema-diff-service.test.ts @@ -30,7 +30,7 @@ const col = (name: string, extra: Partial = {}): Introspecte ...extra, }); -describe('IntrospectedTable.indexes (#11122: optional, absence ≠ empty)', () => { +describe('IntrospectedTable.indexes (optional, absence ≠ empty)', () => { it('a table WITHOUT `indexes` typechecks — absence means "not read", and the in-tree producer emits exactly this', () => { const table: IntrospectedTable = { name: 'customers', @@ -63,7 +63,7 @@ describe('IntrospectedTable.indexes (#11122: optional, absence ≠ empty)', () = }); }); -describe('IntrospectedColumn.defaultValue (#11122: raw `unknown`, not `string`)', () => { +describe('IntrospectedColumn.defaultValue (raw `unknown`, not `string`)', () => { it('accepts the measured emitted values — `null`, a dialect-quoted string, a native boolean', () => { // Measured on live in-memory SQLite (knex `columnInfo()` pass-through, // 2026-08-23): `null` for a column with no default; dialect-quoted diff --git a/packages/spec/src/contracts/scoped-context.test.ts b/packages/spec/src/contracts/scoped-context.test.ts index 11ceeec07b8..45722cbf948 100644 --- a/packages/spec/src/contracts/scoped-context.test.ts +++ b/packages/spec/src/contracts/scoped-context.test.ts @@ -157,7 +157,7 @@ function jsdocUsageExample(): string { return body.join('\n'); } -describe('[#5945] the `HookContext.api` JSDoc example compiles', () => { +describe('the `HookContext.api` JSDoc example compiles', () => { const example = jsdocUsageExample(); it('extracts a real example from hook.zod.ts (anti-vacuity)', () => { @@ -181,7 +181,7 @@ describe('[#5945] the `HookContext.api` JSDoc example compiles', () => { }); }); -describe('[#5945] every corpus-measured call compiles', () => { +describe('every corpus-measured call compiles', () => { /** * One probe per declared member, each written the way the corpus writes it, * so a failure names the member rather than "the big probe went red". The @@ -235,7 +235,7 @@ describe('[#5945] every corpus-measured call compiles', () => { }); }); -describe('[#5945] the evidence bar is enforced, not just documented', () => { +describe('the evidence bar is enforced, not just documented', () => { /** * An undeclared member is TS2339 — a NAMED refusal, which is the point: * before this contract every one of these was TS18046 ("`ctx.api` is of type @@ -289,7 +289,7 @@ describe('[#5945] the evidence bar is enforced, not just documented', () => { }); }); -describe('[#16786] `updateById` DECLARES its answer, and the declaration is enforced', () => { +describe('`updateById` DECLARES its answer, and the declaration is enforced', () => { /** * The spec remainder (commit 6059b29c0), after PR #17255 landed the `objectql` half. * @@ -380,7 +380,7 @@ describe('[#16786] `updateById` DECLARES its answer, and the declaration is enfo }); }); -describe('[#5945] IScopedContext is implementable', () => { +describe('IScopedContext is implementable', () => { it('accepts a minimal implementation', async () => { const rows = [{ id: 'c1', stage: 'hired', position_id: 'p1' }]; diff --git a/packages/spec/src/contracts/security-service.test.ts b/packages/spec/src/contracts/security-service.test.ts index 416f82fcee0..9e48e410df2 100644 --- a/packages/spec/src/contracts/security-service.test.ts +++ b/packages/spec/src/contracts/security-service.test.ts @@ -255,7 +255,7 @@ describe('Security Service Contract', () => { .resolves.toEqual([]); }); - it('[#20935] getQueryableFields is OPTIONAL — and a field served masked is readable but NOT queryable', async () => { + it('getQueryableFields is OPTIONAL — and a field served masked is readable but NOT queryable', async () => { const withoutIt: ISecurityService = makeService({ getReadableFields: async () => ['id', 'name', 'masked'] }); expect(typeof withoutIt.getQueryableFields).toBe('undefined'); const mustNotCompileWithoutAGuard = () => @@ -284,7 +284,7 @@ describe('Security Service Contract', () => { .resolves.toEqual([]); }); - it('[#7616] resolvePermissionSetsForContext is OPTIONAL — absence keeps the consumer on its own resolution (compile-time)', () => { + it('resolvePermissionSetsForContext is OPTIONAL — absence keeps the consumer on its own resolution (compile-time)', () => { // THE structural pin behind "a consumer must keep its local resolution as // the fallback until a floor version carrying this method can be assumed". // Optional is what makes that a property of the TYPE: a security service @@ -306,7 +306,7 @@ describe('Security Service Contract', () => { expect(typeof withoutIt.resolvePermissionSetNames).toBe('function'); }); - it('[#7616] the sets carry the four columns the names cannot: objects, fields, systemPermissions, tabPermissions', async () => { + it('the sets carry the four columns the names cannot: objects, fields, systemPermissions, tabPermissions', async () => { // Why the method exists at all. `resolvePermissionSetNames` answers an // AUDIENCE question ("does this caller hold `sales_manager`?"); a consumer // that must MERGE the caller's grants — the object/field map @@ -468,7 +468,7 @@ describe('Security Service Contract', () => { expect(typeof partial.getReadableFields).toBe('undefined'); }); - it('[#5493] AuthoredRowWriteVerdict names exactly admit / abstain (compile-time)', () => { + it('AuthoredRowWriteVerdict names exactly admit / abstain (compile-time)', () => { const everyVerdict: AuthoredRowWriteVerdict[] = ['admit', 'abstain']; // Deliberately NO `deny`. This surface is evidence, not a gate: the caller // already holds a refusal and asks only whether a declared widener speaks @@ -491,7 +491,7 @@ describe('Security Service Contract', () => { expect(notAWriteOperation).toBe('select'); }); - it('[#5493] checkAuthoredRowWrite is OPTIONAL — absence is the fail-closed default (compile-time)', () => { + it('checkAuthoredRowWrite is OPTIONAL — absence is the fail-closed default (compile-time)', () => { // THE structural pin behind "a deployment without this method behaves // byte-for-byte as today". Declaring it optional is what makes that a // property of the TYPE rather than a promise in prose: a security service @@ -515,7 +515,7 @@ describe('Security Service Contract', () => { expect(withoutIt.checkAuthoredRowWrite?.('deal', 'r1', 'update', {})).toBeUndefined(); }); - it('[#5493] admit is a positive measurement; every other outcome is abstain', async () => { + it('admit is a positive measurement; every other outcome is abstain', async () => { // `admit` means "an app-authored, non-floor policy matches this row for // this operation" — it never means "the write is permitted" (CRUD, the // tenant wall, sharing and the post-image check all still apply), and it is diff --git a/packages/spec/src/contracts/share-link-service.test.ts b/packages/spec/src/contracts/share-link-service.test.ts index ef1f532d13c..4bbaeb19282 100644 --- a/packages/spec/src/contracts/share-link-service.test.ts +++ b/packages/spec/src/contracts/share-link-service.test.ts @@ -112,7 +112,7 @@ function makeRecordingService(): { return { service, seen }; } -describe('share-link contract — enforcement takes the full ExecutionContext (#6430)', () => { +describe('share-link contract — enforcement takes the full ExecutionContext', () => { it('accepts the whole resolveAuthzContext envelope at an enforcement call site', async () => { const { service, seen } = makeRecordingService(); diff --git a/packages/spec/src/contracts/sharing-rule-evaluation-result-grants-refused.pin.test.ts b/packages/spec/src/contracts/sharing-rule-evaluation-result-grants-refused.pin.test.ts index 1008afa2caf..289fec98930 100644 --- a/packages/spec/src/contracts/sharing-rule-evaluation-result-grants-refused.pin.test.ts +++ b/packages/spec/src/contracts/sharing-rule-evaluation-result-grants-refused.pin.test.ts @@ -90,7 +90,7 @@ interface RequiresTheCount extends SharingRuleEvaluationResult { grantsRefused: number; } -describe('[#14969] SharingRuleEvaluationResult.grantsRefused is optional, and absent is not zero', () => { +describe('SharingRuleEvaluationResult.grantsRefused is optional, and absent is not zero', () => { it('reads a non-empty required set (anti-vacuity)', () => { expect(SHARING_RULE_EVALUATION_REQUIRED_KEYS).toHaveLength(6); const pinned: [SixCountsStayRequired, GrantsRefusedIsTheOnlyOptionalKey, GrantsRefusedIsANumberWhenPresent] = [true, true, true]; diff --git a/packages/spec/src/contracts/sharing-service.test.ts b/packages/spec/src/contracts/sharing-service.test.ts index 9657de4c406..e289b316cdc 100644 --- a/packages/spec/src/contracts/sharing-service.test.ts +++ b/packages/spec/src/contracts/sharing-service.test.ts @@ -32,7 +32,7 @@ type Refute = T; * was renamed; these pins keep the two vocabularies honest about what they * each describe. */ -describe('Sharing Service Contract — recipient vocabularies (#4539)', () => { +describe('Sharing Service Contract — recipient vocabularies, each under its own name', () => { it('RecordShareRecipientType matches the sys_record_share recipient_type select', () => { // The storage select on SysRecordShare (`@objectstack/plugin-sharing`) is // the gate on what a row can contain; the contract type mirrors it 1:1. @@ -72,7 +72,7 @@ describe('Sharing Service Contract — recipient vocabularies (#4539)', () => { expect(ruleRecipient).toBe(notAuthorable); }); - it('the stored-row union is exactly the authoring enum plus the reserved `queue` (#14103)', () => { + it('the stored-row union is exactly the authoring enum plus the reserved `queue`', () => { // `plugin-sharing`'s declared-rule bootstrap copies `sharedWith.type` onto // `sys_sharing_rule.recipient_type` member-for-member (an unmapped value is // skipped with a warning), so a member added to one list and not the other @@ -107,7 +107,7 @@ describe('Sharing Service Contract — recipient vocabularies (#4539)', () => { * the thing cross-package callers read instead of the plugin. Deleting the * sentence again turns this red. */ -describe('[#5125] ISharingService write-gate bypass documentation parity', () => { +describe('ISharingService write-gate bypass documentation parity', () => { it('canEdit / canDelete / canManageShares each name the `modifyAllRecords` bypass', async () => { const ts = (await import('typescript')).default; const { readFileSync } = await import('node:fs'); @@ -191,7 +191,7 @@ describe('[#5125] ISharingService write-gate bypass documentation parity', () => * that tsc evaluates (`tsconfig.test.json` compiles this file — #5286), and * prose ones, because prose is the other half of what was missing. */ -describe('[#5858] HierarchyScopeContext tenancy authority', () => { +describe('HierarchyScopeContext tenancy authority — organizationId is authoritative', () => { it('requires `organizationId` and keeps `tenantId` optional (compile-time)', () => { // A caller with no active org states so EXPLICITLY. `null` is a value the // contract carries (platform/unscoped), never an omission. @@ -357,7 +357,7 @@ describe('[#5858] HierarchyScopeContext tenancy authority', () => { * never scroll to. This pins the FILE-level comment rather than a member's, so * it reads the leading comment ranges instead of an interface member. */ -describe('[#5817] ISharingService module header — one gate per write verb', () => { +describe('ISharingService module header — one gate per write verb', () => { it('routes `update` to canEdit() and `delete` to canDelete(), not both to canEdit()', async () => { const ts = (await import('typescript')).default; const { readFileSync } = await import('node:fs'); @@ -418,7 +418,7 @@ describe('[#5817] ISharingService module header — one gate per write verb', () * and the fail-closed rule ("a failed lookup is `deny`, never `abstain`") are * obligations on IMPLEMENTERS that no type can carry. */ -describe('[#6428] ISharingService tri-state write verdict', () => { +describe('ISharingService tri-state write verdict', () => { it('SharingWriteVerdict names exactly allow / abstain / deny (compile-time)', () => { const everyVerdict: SharingWriteVerdict[] = ['allow', 'abstain', 'deny']; // A fourth state would leave a composing caller with a case it cannot map @@ -589,7 +589,7 @@ type RetiredSharingContextSpecimen = { isSystem?: boolean; }; -describe('[#6523] sharing / approval enforcement takes the full ExecutionContext', () => { +describe('sharing / approval enforcement takes the full ExecutionContext', () => { it('declares the full envelope on every adjudicating signature, by type identity', () => { // Type-level assertions are the substance of this case; the runtime // expectation below only keeps vitest from reporting an empty test. tsc diff --git a/packages/spec/src/contracts/startup-orchestrator.test.ts b/packages/spec/src/contracts/startup-orchestrator.test.ts index db9f919baf4..1a5a6b6252e 100644 --- a/packages/spec/src/contracts/startup-orchestrator.test.ts +++ b/packages/spec/src/contracts/startup-orchestrator.test.ts @@ -34,7 +34,7 @@ describe('Startup Orchestrator Contract — the surviving result shape', () => { expect(result.durationMs).toBeUndefined(); }); - it('types a timed-out startup with a SERIALIZABLE error (#4538)', () => { + it('types a timed-out startup with a SERIALIZABLE error', () => { const result: PluginStartupResult = { pluginName: 'broken-plugin', success: false, @@ -67,7 +67,7 @@ describe('Startup Orchestrator Contract — the surviving result shape', () => { expect(result.error!.name).toBe('Error'); }); - it('is the SAME declaration the kernel entry exports (#4538)', () => { + it('is the SAME declaration the kernel entry exports', () => { const value: PluginStartupResult = { pluginName: 'x', success: true }; const parsed = PluginStartupResultSchema.safeParse(value); expect(parsed.success).toBe(true); diff --git a/packages/spec/src/conversions/action-aria-removed.test.ts b/packages/spec/src/conversions/action-aria-removed.test.ts index e9010b1e849..0e4b16294c7 100644 --- a/packages/spec/src/conversions/action-aria-removed.test.ts +++ b/packages/spec/src/conversions/action-aria-removed.test.ts @@ -26,7 +26,7 @@ import type { ConversionNotice } from './types.js'; * against `ActionSchema`, and the stored-row seam replays it (the entry is * `retiredFromLoadPath`, so only data-at-rest seams apply it). */ -describe('[#20323] action-aria-removed (ADR-0087 D2)', () => { +describe('action-aria-removed (ADR-0087 D2)', () => { const ARIA = { ariaLabel: 'Escalate this case', role: 'button' } as const; it('is registered for protocol 18 and retired from the authoring load path', () => { diff --git a/packages/spec/src/conversions/action-block-endpoint-to-target.test.ts b/packages/spec/src/conversions/action-block-endpoint-to-target.test.ts index 314d560b2e6..35a14b07572 100644 --- a/packages/spec/src/conversions/action-block-endpoint-to-target.test.ts +++ b/packages/spec/src/conversions/action-block-endpoint-to-target.test.ts @@ -52,7 +52,7 @@ function replayStored(page: Record) { }; } -describe('[#21005] action-block-endpoint-to-target (ADR-0087 D2)', () => { +describe('action-block-endpoint-to-target (ADR-0087 D2)', () => { it('is registered for protocol 18 and retired from the authoring load path', () => { const entry = ALL_CONVERSIONS.find((c) => c.id === ID); expect(entry, 'the conversion is registered').toBeDefined(); diff --git a/packages/spec/src/conversions/conversions.test.ts b/packages/spec/src/conversions/conversions.test.ts index bb416793f6b..fad00ada93e 100644 --- a/packages/spec/src/conversions/conversions.test.ts +++ b/packages/spec/src/conversions/conversions.test.ts @@ -231,7 +231,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * case by whether the two values actually disagree; these tests pin both * halves, because only one of them is a change. */ - describe('shadowed alias, split by value (#4923)', () => { + describe('shadowed alias, split by value', () => { const crudFlow = (config: Record) => ({ flows: [{ name: 'f', nodes: [{ id: 'a', type: 'create_record', config }] }], }); @@ -408,7 +408,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * and a second replay is a no-op. The flow rehydration seam's refusal by id * is pinned where that seam lives (`service-automation`). */ - describe('flow-decision-mode-inclusive-explicit (#15429)', () => { + describe('flow-decision-mode-inclusive-explicit', () => { const ID = 'flow-decision-mode-inclusive-explicit'; const entry = () => ALL_CONVERSIONS.find((c) => c.id === ID)!; const decisionFlow = (edges: Record[], config?: Record) => ({ @@ -608,7 +608,7 @@ describe('conversion layer (ADR-0087 D2)', () => { }); }); - describe('flow-node-wait-timeout-keys-removed (#4158)', () => { + describe('flow-node-wait-timeout-keys-removed', () => { const wecFlow = (waitEventConfig: Record) => ({ flows: [ { @@ -666,7 +666,7 @@ describe('conversion layer (ADR-0087 D2)', () => { }); }); - describe('flow-node-script-branch-keys-removed (#4343)', () => { + describe('flow-node-script-branch-keys-removed', () => { /** One `script` node in a flow shaped the way the conversion walks it. */ const scriptFlow = (config: Record) => ({ flows: [ @@ -782,7 +782,7 @@ describe('conversion layer (ADR-0087 D2)', () => { }); }); - describe('flow-node-wait-event-config-lift (PD #12 retirement, #4045)', () => { + describe('flow-node-wait-event-config-lift (PD #12 retirement)', () => { /** * One `wait` node in a flow that `FlowSchema` can actually parse — `label` is * required on both the flow and every node, which the conversion fixtures @@ -900,7 +900,7 @@ describe('conversion layer (ADR-0087 D2)', () => { // that never runs the conversion is NOT broken. Either alone would be the // wrong shape — a rename that breaks old rows, or a rename that leaves one // deployment holding two spellings of one driver forever. - describe('datasource-driver-mongo-to-mongodb (#6345)', () => { + describe('datasource-driver-mongo-to-mongodb', () => { const convert = (datasources: unknown[]) => collectConversionNotices({ datasources }, { includeRetired: true }); @@ -954,7 +954,7 @@ describe('conversion layer (ADR-0087 D2)', () => { // driver-scoped by construction; these pin the two edges the flat fixture // pair cannot express as sharply: the same key converting under one driver // and not another, and the load-path posture. - describe('datasource-config-driver-key-aliases (#4456)', () => { + describe('datasource-config-driver-key-aliases', () => { const convert = (datasources: unknown[]) => collectConversionNotices({ datasources }, { includeRetired: true }); @@ -973,7 +973,7 @@ describe('conversion layer (ADR-0087 D2)', () => { expect(notices.filter((n) => n.conversionId === 'datasource-config-driver-key-aliases')).toHaveLength(1); }); - it('still lands for a row whose driver id is ITSELF being renamed (#6345)', () => { + it('still lands for a row whose driver id is ITSELF being renamed', () => { // The pairs are keyed by CANONICAL driver id, and commit e2798fab7 renamed mongo's. // A stored `driver: 'mongo'` must therefore still find the mongo pairs // (through the alias) even as the sibling conversion rewrites its id — @@ -1016,7 +1016,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * into a kind would turn a loud rejection into a wrong comparison — the exact * failure class #5011 exists to end. */ - describe('dashboard-widget-compareto-converged (#5011)', () => { + describe('dashboard-widget-compareto-converged', () => { const dash = (compareTo: unknown) => ({ dashboards: [{ name: 'revenue_review', @@ -1111,7 +1111,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * every case here runs the plain load posture (no `includeRetired`) — that * the rewrite happens without it is the property objectui is waiting on. */ - describe('page-header-subtitle-alias (#4827 — the `subtitle ?? description` retirement)', () => { + describe('page-header-subtitle-alias (the `subtitle ?? description` retirement)', () => { const pageWith = (...components: Record[]) => ({ pages: [{ name: 'crm_lead_detail', regions: [{ name: 'header', components }] }], }); @@ -1285,7 +1285,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * out of the same key. Both are ways this rewrite could be lossy, and neither * is visible in a fixture that only carries the happy path. */ - describe('inline-action-api-params-to-body-extra (#5777)', () => { + describe('inline-action-api-params-to-body-extra', () => { const button = (action: Record) => ({ pages: [{ name: 'showcase_contact_form', @@ -1328,7 +1328,7 @@ describe('conversion layer (ADR-0087 D2)', () => { expect(applyConversions(stack)).toBe(stack); }); - it('keeps BOTH when `bodyExtra` already says something different (#4923 house rule)', () => { + it('keeps BOTH when `bodyExtra` already says something different', () => { const stack = button({ type: 'api', target: '/x', params: { a: 1 }, bodyExtra: { b: 2 } }); const out = applyConversions(stack); expect(out).toBe(stack); @@ -1388,7 +1388,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * - the **acceptance face in both directions**, since a rename moves what * the schema accepts as well as what it refuses. */ - describe('page-tabs-type-to-tab-style (#6776)', () => { + describe('page-tabs-type-to-tab-style', () => { const regionPage = (properties: Record) => ({ pages: [{ name: 'sys_position_detail', regions: [{ name: 'main', components: [{ type: 'page:tabs', properties }] }] }], }); @@ -1463,14 +1463,14 @@ describe('conversion layer (ADR-0087 D2)', () => { expect(applyConversions(stack, { includeRetired: true })).toBe(stack); }); - it('keeps BOTH when `tabStyle` already says something different (#4923 house rule)', () => { + it('keeps BOTH when `tabStyle` already says something different', () => { const stack = regionPage({ tabStyle: 'pill', type: 'card', items: [] }); const { out, notices } = convert(stack); expect(out).toBe(stack); expect(notices).toEqual([]); }); - it('drops the redundant twin when both spellings agree (#4923)', () => { + it('drops the redundant twin when both spellings agree', () => { const { out, notices } = convert(regionPage({ tabStyle: 'pill', type: 'pill', items: [] })); expect(propsOf(out, 'region')).toEqual({ tabStyle: 'pill', items: [] }); expect(notices).toHaveLength(1); @@ -1531,7 +1531,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * down, through the very machinery meant to repair it. `retiredFromLoadPath` * is what buys that, so it is asserted directly rather than inferred. */ - describe('app-hidden-to-unpublished (#4829)', () => { + describe('app-hidden-to-unpublished', () => { const storedApp = (app: Record) => ({ apps: [{ name: 'production_management', ...app }] }); const convertStored = (stack: Record) => { const notices: ConversionNotice[] = []; @@ -1556,7 +1556,7 @@ describe('conversion layer (ADR-0087 D2)', () => { expect(notices).toEqual([]); }); - it('#4923: a row that already carries `_unpublished` keeps BOTH keys, untouched', () => { + it('a row that already carries `_unpublished` keeps BOTH keys, untouched', () => { // The machine has already spoken about this row. Reconciling a // disagreeing pair is a human's call, not the loader's — and it is what // makes the pass idempotent on a row that has already converted. @@ -1671,7 +1671,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * `includeRetired` (the stored posture); the one case without it pins that * the load seam does NOT quietly accept the dialect. */ - describe('field-reference-to-alias (#13700 — the stored `reference_to` dialect canonicalizes)', () => { + describe('field-reference-to-alias (the stored `reference_to` dialect canonicalizes)', () => { const stackWith = (fields: Record) => ({ objects: [{ name: 'crm_contact', label: 'Contact', fields }], }); @@ -1796,7 +1796,7 @@ describe('conversion layer (ADR-0087 D2)', () => { * Written against the SEAM rather than the id, so re-adding the behaviour * under a different id fails here too. */ -describe('no conversion invents a NOT NULL column (ADR-0113, #16693)', () => { +describe('no conversion invents a NOT NULL column (ADR-0113)', () => { const requiredOnly = () => ({ objects: [{ name: 'clm_party', diff --git a/packages/spec/src/conversions/dataset-count-measure-empty-field-removed.test.ts b/packages/spec/src/conversions/dataset-count-measure-empty-field-removed.test.ts index 27ffb48abe3..2628ba9dcdb 100644 --- a/packages/spec/src/conversions/dataset-count-measure-empty-field-removed.test.ts +++ b/packages/spec/src/conversions/dataset-count-measure-empty-field-removed.test.ts @@ -48,7 +48,7 @@ function fieldIssuePaths(row: unknown): string[] { return r.success ? [] : r.error.issues.map((i) => i.path.join('.')).filter((p) => p.endsWith('field')); } -describe('[#21220] dataset-count-measure-empty-field-removed (ADR-0087 D2)', () => { +describe('dataset-count-measure-empty-field-removed (ADR-0087 D2)', () => { it('is registered for protocol 18, retired from the authoring load path, and linked from its D3 entry', () => { const entry = ALL_CONVERSIONS.find((c) => c.id === ID); expect(entry, 'the conversion is registered').toBeDefined(); diff --git a/packages/spec/src/conversions/page-component-walk.test.ts b/packages/spec/src/conversions/page-component-walk.test.ts index a8181c8814d..6f2520da21c 100644 --- a/packages/spec/src/conversions/page-component-walk.test.ts +++ b/packages/spec/src/conversions/page-component-walk.test.ts @@ -43,7 +43,7 @@ const regionPage = (...components: unknown[]) => ({ const componentAt = (stack: Record, ...steps: (string | number)[]) => steps.reduce((node, step) => node[step], (stack.pages as any[])[0]); -describe('#6775 — a conversion reaches a component nested in another component', () => { +describe('a conversion reaches a component nested in another component', () => { /** * The four container shapes this walker descends, spelled out by hand as the * fixture — `body` included: it is a RETIRED spelling the authoring walks @@ -100,7 +100,7 @@ describe('#6775 — a conversion reaches a component nested in another component }); } - it('reaches every position `pageComponentSlotPositions()` names, the retired spelling included (#20940)', () => { + it('reaches every position `pageComponentSlotPositions()` names, the retired spelling included', () => { const positions = pageComponentSlotPositions(); // Guards the case against passing vacuously on an empty list, and ties it // to the four explicit shapes above. @@ -186,7 +186,7 @@ describe('#6775 — a conversion reaches a component nested in another component }); }); -describe('#6775 — the page-component walk stays copy-on-write and shape-gated', () => { +describe('the page-component walk stays copy-on-write and shape-gated', () => { it('returns the identical reference when nothing nested converts', () => { const clean = regionPage({ type: 'page:section', diff --git a/packages/spec/src/conversions/region-walk.test.ts b/packages/spec/src/conversions/region-walk.test.ts index 3851b17df83..ab40067dc4d 100644 --- a/packages/spec/src/conversions/region-walk.test.ts +++ b/packages/spec/src/conversions/region-walk.test.ts @@ -24,7 +24,7 @@ const httpNode = (id: string) => ({ id, type: 'http', label: id, config: { url: const region = (...nodes: unknown[]) => ({ nodes, edges: [] }); -describe('#4347 — conversions reach nodes inside structured regions', () => { +describe('conversions reach nodes inside structured regions', () => { it('converts a node in a `loop` body exactly as it converts its top-level twin', () => { const { stack, notices } = collectConversionNotices({ flows: [{ @@ -151,7 +151,7 @@ describe('#4347 — conversions reach nodes inside structured regions', () => { }); }); -describe('#4347 — the region walk stays copy-on-write and shape-gated', () => { +describe('the region walk stays copy-on-write and shape-gated', () => { it('returns the identical reference when nothing inside a region converts', () => { const clean = { flows: [{ @@ -222,7 +222,7 @@ describe('#4347 — the region walk stays copy-on-write and shape-gated', () => * covers every declared container, so a fourth construct added to the shared * table cannot land while the conversion pass keeps skipping it. */ -describe('#4401 — the conversion walk descends into every declared container', () => { +describe('the conversion walk descends into every declared container', () => { it('reaches a region node under each container type in the shared table', () => { for (const nodeType of FLOW_REGION_SLOTS_BY_TYPE.keys()) { for (const { key, arity } of FLOW_REGION_SLOTS_BY_TYPE.get(nodeType)!) { diff --git a/packages/spec/src/conversions/retired-after.census.test.ts b/packages/spec/src/conversions/retired-after.census.test.ts index 7e8ed77a042..61df3941bea 100644 --- a/packages/spec/src/conversions/retired-after.census.test.ts +++ b/packages/spec/src/conversions/retired-after.census.test.ts @@ -84,7 +84,7 @@ function publishedRetiredAfter(id: string): string | null { const RETIRED = ALL_CONVERSIONS.filter((c) => c.retiredFromLoadPath === true); const LIVE = ALL_CONVERSIONS.filter((c) => c.retiredFromLoadPath !== true); -describe('[#20390] retiredAfter census — every retired entry stamped from the published tarballs', () => { +describe('retiredAfter census — every retired entry stamped from the published tarballs', () => { it('the census is well-formed: stable releases in ascending order, never ahead of the package label', () => { expect(CENSUS.releases.length).toBeGreaterThan(0); const versions = [CENSUS.precedingRelease, ...CENSUS.releases.map((r) => r.version)]; diff --git a/packages/spec/src/conversions/stored.test.ts b/packages/spec/src/conversions/stored.test.ts index 1770351c92a..1f5d99a652e 100644 --- a/packages/spec/src/conversions/stored.test.ts +++ b/packages/spec/src/conversions/stored.test.ts @@ -9,7 +9,7 @@ import { CONVERSION_TODO_CODE, type ConversionNotice, type ConversionTodoNotice // rest was written under some past protocol and has no author to be taught by // a tombstone, so `retiredFromLoadPath` entries — which the authored load seam // skips — MUST apply here. -describe('applyConversionsToStoredItem (stored sys_metadata rows, #3903)', () => { +describe('applyConversionsToStoredItem (stored sys_metadata rows)', () => { it('replays a RETIRED conversion over a stored object row (conditionalRequired → requiredWhen)', () => { const row = { name: 'crm_task', @@ -46,7 +46,7 @@ describe('applyConversionsToStoredItem (stored sys_metadata rows, #3903)', () => // drops the meaningless key (behaviour-preserving — #7501's enforcement // deliberately skipped malformed declarations, so it enforced nothing) // and the rest of the row survives byte-identically. - it('drops a malformed stored scale/precision instead of breaking the row (#8321)', () => { + it('drops a malformed stored scale/precision instead of breaking the row', () => { const row = { name: 'crm_deal', label: 'Deal', @@ -124,7 +124,7 @@ describe('applyConversionsToStoredItem (stored sys_metadata rows, #3903)', () => // stored pass MUST serve it canonical, because the factory now reads exactly // one spelling per key (deleting the fallbacks without this replay would // silently move a sqlite `file:` row's data to `:memory:`). - describe('stored datasource rows (datasource-config-driver-key-aliases, #4456)', () => { + describe('stored datasource rows (datasource-config-driver-key-aliases)', () => { // The fourth column is the driver id the stored pass SERVES, which differs // from the stored one for exactly one row: commit e2798fab7 renamed the canonical mongo // id to `mongodb`, and `datasource-driver-mongo-to-mongodb` converges the @@ -173,7 +173,7 @@ describe('applyConversionsToStoredItem (stored sys_metadata rows, #3903)', () => // replayed a translation conversion over one. The item door's `settings` is // the case that made it matter: a stored item's copy overrides the // platform's, because the runtime-authored layer is read over the bundles. - describe('stored translation rows (translation-per-app-settings-removed, #19620)', () => { + describe('stored translation rows (translation-per-app-settings-removed)', () => { const storedItem = () => ({ name: 'zh-CN', locale: 'zh-CN', diff --git a/packages/spec/src/conversions/time-default-utc-suffix-dropped.test.ts b/packages/spec/src/conversions/time-default-utc-suffix-dropped.test.ts index 719bf796221..606c4c6f0f8 100644 --- a/packages/spec/src/conversions/time-default-utc-suffix-dropped.test.ts +++ b/packages/spec/src/conversions/time-default-utc-suffix-dropped.test.ts @@ -41,7 +41,7 @@ function defaultValueIssuePaths(row: unknown): string[] { return r.success ? [] : r.error.issues.map((i) => i.path.join('.')).filter((p) => p.endsWith('defaultValue')); } -describe('[#20740] time-default-utc-suffix-dropped (ADR-0087 D2)', () => { +describe('time-default-utc-suffix-dropped (ADR-0087 D2)', () => { it('is registered for protocol 18 and retired from the authoring load path', () => { const entry = ALL_CONVERSIONS.find((c) => c.id === ID); expect(entry, 'the conversion is registered').toBeDefined();