From 40fd6a952446deb9ee68d4fb487f69dead15f15a Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 4 Oct 2026 11:12:18 +0000 Subject: [PATCH 1/2] test(spec): kernel test titles state each cited decision in words instead of a tracker number (stage 11) Class (e) of the spec lane's share, the second area: the 102 test strings under packages/spec/src/kernel that carried a tracker id (106 ids, 69 records). Each id is either replaced by the decision its record made, stated in words, or dropped where the title already says it. Text only: no assertion, comment or non-test file changes. Claude-Session: https://claude.ai/code/session_01T9u38rswFp5Rw8DswRUReJ Co-authored-by: Claude --- .../kernel/activation-events-retirement.test.ts | 2 +- .../src/kernel/additional-types-retirement.test.ts | 2 +- .../src/kernel/capability-metadata-kind.test.ts | 2 +- .../cli-command-contribution-retirement.test.ts | 6 +++--- packages/spec/src/kernel/events.test.ts | 4 ++-- packages/spec/src/kernel/execution-context.test.ts | 10 +++++----- .../src/kernel/functional-completeness.test.ts | 12 ++++++------ .../spec/src/kernel/manifest-unknown-keys.test.ts | 10 +++++----- packages/spec/src/kernel/manifest.test.ts | 12 ++++++------ .../src/kernel/metadata-authoring-lint.test.ts | 14 +++++++------- .../metadata-customization-retirement.test.ts | 2 +- packages/spec/src/kernel/metadata-loader.test.ts | 4 ++-- packages/spec/src/kernel/metadata-plugin.test.ts | 4 ++-- .../kernel/metadata-type-api-registration.test.ts | 8 ++++---- .../metadata-type-field-registration.test.ts | 6 +++--- .../src/kernel/metadata-type-redaction.test.ts | 4 ++-- .../spec/src/kernel/metadata-type-schemas.test.ts | 8 ++++---- .../kernel/package-dependency-dual-source.test.ts | 2 +- packages/spec/src/kernel/package-upgrade.test.ts | 2 +- .../spec/src/kernel/platform-capabilities.test.ts | 10 +++++----- .../plugin-lifecycle-advanced-retirement.test.ts | 10 +++++----- .../src/kernel/plugin-lifecycle-advanced.test.ts | 10 +++++----- .../src/kernel/plugin-loading-retirement.test.ts | 4 ++-- .../src/kernel/plugin-runtime-retirement.test.ts | 2 +- .../plugin-runtime-tier-truthful-text.test.ts | 6 +++--- .../src/kernel/plugin-security-advanced.test.ts | 6 +++--- .../plugin-security-scan-result-retirement.test.ts | 4 ++-- packages/spec/src/kernel/plugin-security.test.ts | 2 +- .../src/kernel/plugin-ui-required-keys.test.ts | 4 ++-- packages/spec/src/kernel/plugin-versioning.test.ts | 2 +- packages/spec/src/kernel/plugin.test.ts | 4 ++-- .../src/kernel/preview-mode-retirement.test.ts | 8 ++++---- .../spec/src/kernel/repeater-item-titles.test.ts | 6 +++--- .../kernel/reports-capability-retirement.test.ts | 2 +- .../kernel/startup-orchestrator-retirement.test.ts | 6 +++--- .../spec/src/kernel/startup-orchestrator.test.ts | 4 ++-- 36 files changed, 102 insertions(+), 102 deletions(-) diff --git a/packages/spec/src/kernel/activation-events-retirement.test.ts b/packages/spec/src/kernel/activation-events-retirement.test.ts index 58adc6b6a56..e3875893d48 100644 --- a/packages/spec/src/kernel/activation-events-retirement.test.ts +++ b/packages/spec/src/kernel/activation-events-retirement.test.ts @@ -35,7 +35,7 @@ import { // (#4834 superseded the kernel half: `DynamicLoadRequest` — the shape that // carried the tombstoned key — was removed whole, so this file's kernel-side // parse assertion is gone. See the block above the studio test.) -describe('[#4657] ActivationEventSchema removal — no entry exports the name', () => { +describe('ActivationEventSchema removal — no entry exports the name', () => { it('resolves the export surface: the retired names have ZERO holders across every public entry', () => { // Anti-vacuity: the baseline must cover the real surface. (This used to // enumerate package.json's exports map and build its own `ts.createProgram` diff --git a/packages/spec/src/kernel/additional-types-retirement.test.ts b/packages/spec/src/kernel/additional-types-retirement.test.ts index 1938be78ba7..e7115e4c3f2 100644 --- a/packages/spec/src/kernel/additional-types-retirement.test.ts +++ b/packages/spec/src/kernel/additional-types-retirement.test.ts @@ -31,7 +31,7 @@ import { MetadataPluginConfigSchema, MetadataPluginManifestSchema } from './meta // pins assert the strongest set this surface really has: refusal, the issue // `code`, the `path` naming WHICH key was refused, and the prescription text // (#5240: where the wording is the contract, pin the wording). -describe('[#8586] MetadataPluginConfig.additionalTypes retirement', () => { +describe('MetadataPluginConfig.additionalTypes retirement', () => { /** A config that is valid except for whatever the individual test adds. */ const baseConfig = { storage: {} } as const; diff --git a/packages/spec/src/kernel/capability-metadata-kind.test.ts b/packages/spec/src/kernel/capability-metadata-kind.test.ts index fdd8038d44d..57209950e84 100644 --- a/packages/spec/src/kernel/capability-metadata-kind.test.ts +++ b/packages/spec/src/kernel/capability-metadata-kind.test.ts @@ -63,7 +63,7 @@ const DECLARATION = { packageId: 'com.acme.billing', }; -describe('#5961 — capability is a registered metadata kind', () => { +describe('capability is a registered metadata kind', () => { // ── the three registries that were missing it ───────────────────────── it('is a member of the kind enum', () => { diff --git a/packages/spec/src/kernel/cli-command-contribution-retirement.test.ts b/packages/spec/src/kernel/cli-command-contribution-retirement.test.ts index ee0dde565eb..795a3d5b9a7 100644 --- a/packages/spec/src/kernel/cli-command-contribution-retirement.test.ts +++ b/packages/spec/src/kernel/cli-command-contribution-retirement.test.ts @@ -38,7 +38,7 @@ import { // // Form follows #11825 / commit 2c86fe3ea / #4988: resolved symbol identity over every // public entry via the build-time `export-origins/` artifact. -describe('[#12007] kernel/ CLICommandContribution retirement', () => { +describe('kernel/ CLICommandContribution retirement', () => { /** The 2 names the retired def exported (1 schema const + 1 type). */ const RETIRED_NAMES = [ 'CLICommandContributionSchema', @@ -71,7 +71,7 @@ describe('[#12007] kernel/ CLICommandContribution retirement', () => { // ── ABSENCE (every entry, not just ./kernel) ────────────────────────── for (const name of RETIRED_NAMES) { - expect(holdersOf(name), `${name} must have zero holders after #12007`).toEqual([]); + expect(holdersOf(name), `${name} must have zero holders after its retirement`).toEqual([]); } // ── SURVIVAL ────────────────────────────────────────────────────────── @@ -83,7 +83,7 @@ describe('[#12007] kernel/ CLICommandContribution retirement', () => { it('the runtime barrel resolves without the retired schema and keeps the survivor', async () => { const kernel = await import('./index'); - expect(kernel, 'CLICommandContributionSchema must not be exported after #12007') + expect(kernel, 'CLICommandContributionSchema must not be exported after its retirement') .not.toHaveProperty('CLICommandContributionSchema'); // Anti-vacuity: the barrel really resolved and still exports the live // oclif surface plus an unrelated kernel anchor. diff --git a/packages/spec/src/kernel/events.test.ts b/packages/spec/src/kernel/events.test.ts index 06538a7549d..aee27faf810 100644 --- a/packages/spec/src/kernel/events.test.ts +++ b/packages/spec/src/kernel/events.test.ts @@ -135,7 +135,7 @@ describe('EventSchema', () => { // This pin holds the WIDENING: spellings the retired grammar refused // (PascalCase, kebab-case, leading digit/dot) now parse — a regression to a // schema-level grammar here should be a deliberate ruling, not drift. - it('accepts event names as plain strings — the dot-notation grammar is retired (#13613)', () => { + it('accepts event names as plain strings — the dot-notation grammar is retired', () => { const names = [ // conventional dot-notation spellings (valid before and after) 'user.created', @@ -823,7 +823,7 @@ describe('Enhanced Event Handler', () => { // payload) rather than a bare unrecognized-key error, and the value survives at // the same magnitude. Asserting the message, not just `.toThrow()`: a bare // throw stays green when the schema throws for some unrelated reason. -describe('Event bus retention windows carry their unit (#15678)', () => { +describe('Event bus retention windows carry their unit', () => { it.each([ ['EventPersistence', EventPersistenceSchema, { enabled: true }], ['EventSourcingConfig', EventSourcingConfigSchema, {}], diff --git a/packages/spec/src/kernel/execution-context.test.ts b/packages/spec/src/kernel/execution-context.test.ts index 74b1748e935..750dd4554bb 100644 --- a/packages/spec/src/kernel/execution-context.test.ts +++ b/packages/spec/src/kernel/execution-context.test.ts @@ -69,7 +69,7 @@ describe('ExecutionContextSchema', () => { // `message: undefined`. The contract is stated here, at the producer's // declaration, rather than tolerated at each consumer. // --------------------------------------------------------------------------- -describe('ExecutionContextSchema.authGate — the ADR-0069 gate posture (#7280)', () => { +describe('ExecutionContextSchema.authGate — the ADR-0069 gate posture is a declared field', () => { it('accepts a well-formed gate', () => { const ctx = ExecutionContextSchema.parse({ userId: 'u1', @@ -164,7 +164,7 @@ describe('ExecutionContextSchema.authGate — the ADR-0069 gate posture (#7280)' // were emptied, so the non-empty check is what makes this pin fail on a blank // cell rather than only on changed wording. // --------------------------------------------------------------------------- -describe('ExecutionContextSchema.preserveAudit — the published description (#6881)', () => { +describe('ExecutionContextSchema.preserveAudit — the published description', () => { const description = ExecutionContextSchema.shape.preserveAudit.description ?? ''; it('is present and non-empty, so the generated reference row is not blank', () => { @@ -216,7 +216,7 @@ describe('ExecutionContextSchema.preserveAudit — the published description (#6 // that lost it once seeded with automation live while the main path had it // suppressed, a self-trigger loop that wedged first boot (#3760). So "one flag // looks redundant, drop it" is exactly the edit that must go red. -describe('[#17178] SEED_WRITE_EXECUTION_CONTEXT', () => { +describe('SEED_WRITE_EXECUTION_CONTEXT — one spelling of the seed posture', () => { it('is a valid ExecutionContext — the WHOLE value parses, not merely its key names', () => { const parsed = ExecutionContextSchema.safeParse(SEED_WRITE_EXECUTION_CONTEXT); expect(parsed.success, JSON.stringify('error' in parsed ? parsed.error : {})).toBe(true); @@ -230,11 +230,11 @@ describe('[#17178] SEED_WRITE_EXECUTION_CONTEXT', () => { ]); }); - it('sets `skipTriggers` — `isSystem` alone does NOT suppress trigger dispatch (#3760)', () => { + it('sets `skipTriggers` — `isSystem` alone does NOT suppress trigger dispatch', () => { expect(SEED_WRITE_EXECUTION_CONTEXT.skipTriggers).toBe(true); }); - it('sets `seedReplay` — the state_machine exemption a mid-lifecycle seed row needs (#3433)', () => { + it('sets `seedReplay` — the state_machine exemption a mid-lifecycle seed row needs', () => { expect(SEED_WRITE_EXECUTION_CONTEXT.seedReplay).toBe(true); }); diff --git a/packages/spec/src/kernel/functional-completeness.test.ts b/packages/spec/src/kernel/functional-completeness.test.ts index 9d0ec03c687..36b604d46c2 100644 --- a/packages/spec/src/kernel/functional-completeness.test.ts +++ b/packages/spec/src/kernel/functional-completeness.test.ts @@ -39,7 +39,7 @@ const only = (findings: ReturnType) => { }; describe('checkFieldCompleteness — the verified inert shapes go red', () => { - it('flags a bare summary as an ERROR (the cloud#687 founding case)', () => { + it('flags a bare summary as an ERROR (the founding case: a roll-up that reads 0 forever)', () => { const f = only(checkFieldCompleteness({ type: 'summary' })); expect(f.rule).toBe(FIELD_SUMMARY_WITHOUT_OPERATIONS); expect(f.severity).toBe('error'); @@ -158,7 +158,7 @@ describe('checkViewCompleteness — layout bindings', () => { expect(checkViewCompleteness({ type: 'tree', tree: { parentField: 'parent' } })).toEqual([]); }); - it('the calendar body describes the REFUSAL, not a deleted literal fallback (#17445)', () => { + it('the calendar body describes the REFUSAL, not a deleted literal fallback', () => { // Re-measured on objectui `main` at `0cf2d6644` (2026-09-21), both halves // of the path: `ListView.tsx`'s `case 'calendar'` restates only declared // bindings — objectui#7029 deleted the `startDateField || 'start_date'` / @@ -199,7 +199,7 @@ describe('checkViewCompleteness — layout bindings', () => { keys: ['timeline.startDateField', 'timeline.titleField'] }, { type: 'map', component: 'ObjectMap.tsx', screen: 'Map configuration required', keys: ['map.locationField', 'map.latitudeField', 'map.longitudeField'] }, - ])('the $type body describes the REFUSAL, not a deleted literal fallback (#19630)', ({ type, component, screen, keys }) => { + ])('the $type body describes the REFUSAL, not a deleted literal fallback', ({ type, component, screen, keys }) => { const f = only(checkViewCompleteness({ type }) as never); expect(f.rule).toBe(VIEW_LAYOUT_WITHOUT_BINDING); expect(f.message).not.toContain('falls back to literal default field names'); @@ -429,7 +429,7 @@ describe('checkViewCompleteness — rowColor without a colour map (the parse-cle // Pinning the literal string would rot. What is pinned instead is the // PROPERTY that made it wrong: the value the prescription suggests is fed // back through this module, and must survive it. - it('hands the author a prescription this module itself accepts (#18791)', () => { + it('hands the author a prescription this module itself accepts', () => { const f = only(checkViewCompleteness({ type: 'grid', rowColor: { field: 'status' } }) as never); const suggested = /'':\s*'([^']+)'/.exec(f.fix)?.[1]; expect(suggested, `no suggested colour value in the prescription: ${f.fix}`).toBeDefined(); @@ -440,7 +440,7 @@ describe('checkViewCompleteness — rowColor without a colour map (the parse-cle ).toEqual([]); }); - it('⛔ names no hex placeholder anywhere in the prescription (#18791)', () => { + it('⛔ names no hex placeholder anywhere in the prescription', () => { // The direct, dumb half of the pin above: whatever the wording becomes, it // must not put a hex back in front of an author. `token` is refused for the // same reason — it named nothing an author could look up, and stood beside @@ -519,7 +519,7 @@ describe('checkViewCompleteness — rowColor without a colour map (the parse-cle * app-local resolvability arm went red naming all four, and the presence arm * stayed green. */ -describe('checkViewCompleteness — rowColor values the renderer resolves to nothing (#18791)', () => { +describe('checkViewCompleteness — rowColor values the renderer resolves to nothing', () => { const grid = (colors: Record) => checkViewCompleteness({ type: 'grid', rowColor: { field: 'priority', colors } }); diff --git a/packages/spec/src/kernel/manifest-unknown-keys.test.ts b/packages/spec/src/kernel/manifest-unknown-keys.test.ts index 1532eb2910c..e3504ba2ef8 100644 --- a/packages/spec/src/kernel/manifest-unknown-keys.test.ts +++ b/packages/spec/src/kernel/manifest-unknown-keys.test.ts @@ -59,7 +59,7 @@ const unrecognized = (result: ReturnType) => { | undefined; }; -describe("#14192 — unknown keys inside `manifest:` are refused at parse (the card's measurement, inverted)", () => { +describe("unknown keys inside `manifest:` are refused at parse (the silent-drop measurement, inverted)", () => { it('a transposed `namesapce` is a named refusal carrying the rename — not an undefined namespace', () => { // The card's own measurement: parse success, key dropped, namespace undefined. const { namespace: _omitted, ...withoutNamespace } = legal(); @@ -108,7 +108,7 @@ describe("#14192 — unknown keys inside `manifest:` are refused at parse (the c }); }); -describe('#14192 — the refusal reaches every door the measurement listed', () => { +describe('the refusal reaches every door the measurement listed', () => { const typo = () => { const { namespace: _omitted, ...rest } = legal(); return { ...rest, namesapce: 'probe' }; @@ -218,7 +218,7 @@ describe('#14192 — the refusal reaches every door the measurement listed', () }); }); -describe('#14192 — the nested blocks inside `manifest:` are closed under the same measurement', () => { +describe('the nested blocks inside `manifest:` are closed under the same measurement', () => { it('`contributes.kind` (for `kinds`) is refused at the block, with the rename', () => { const result = ManifestSchema.safeParse({ ...legal(), contributes: { kind: [{ id: 'sys.bi.report' }] } }); expect(result.success).toBe(false); @@ -278,7 +278,7 @@ describe('#14192 — the nested blocks inside `manifest:` are closed under the s }); }); -describe('#14192 — the accept side does not move, and `main` is declared', () => { +describe('the accept side does not move, and `main` is declared', () => { it('every live key parses and survives — the whole declared vocabulary in one manifest', () => { const full = { ...legal(), @@ -357,7 +357,7 @@ describe('#14192 — the accept side does not move, and `main` is declared', () }); }); -describe('#16328 — the `permissions` union door names the surface and the rename, like every other door', () => { +describe('the `permissions` union door names the surface and the rename, like every other door', () => { // ## What #16328 reported, and what was actually wrong // // The card measured `{ services: ['object'], hoooks: ['x'] }` refused with a diff --git a/packages/spec/src/kernel/manifest.test.ts b/packages/spec/src/kernel/manifest.test.ts index 7afd1898034..ced42a5eb53 100644 --- a/packages/spec/src/kernel/manifest.test.ts +++ b/packages/spec/src/kernel/manifest.test.ts @@ -381,7 +381,7 @@ describe('ManifestSchema', () => { }); }); -describe('contributes dead-member retirement (#10724, ADR-0049 — tombstoned, not deleted)', () => { +describe('contributes dead-member retirement (ADR-0049 — tombstoned, not deleted)', () => { // Nine members had zero readers monorepo-wide (the controlled census commit be21955ba records, // completed on cloud 2026-08-24). When they were retired `ManifestSchema` and // the `contributes` object were NOT `.strict()`, so a plain deletion would @@ -417,7 +417,7 @@ describe('contributes dead-member retirement (#10724, ADR-0049 — tombstoned, n ); }); - it('still parses the surviving `kinds` member — `routes` retired separately (#10726)', () => { + it('still parses the surviving `kinds` member — `routes` retired separately', () => { const parsed = ManifestSchema.parse({ ...base, contributes: { @@ -434,7 +434,7 @@ describe('contributes dead-member retirement (#10724, ADR-0049 — tombstoned, n }); }); -describe('contributes.routes retirement (#10726, ADR-0049 — maintainer-ruled Option B 2026-08-22)', () => { +describe('contributes.routes retirement (ADR-0049 — removed for the `http.server` mount, maintainer-ruled 2026-08-22)', () => { // The one `contributes` member split onto its own card: zero readers like // its nine siblings retired by commit be21955ba (that commit's controlled census, cloud leg closed // clean on 2026-08-24), but four published surfaces taught it as THE way to @@ -472,7 +472,7 @@ describe('contributes.routes retirement (#10726, ADR-0049 — maintainer-ruled O }); }); -describe('contributes.kinds[].globs retirement (#11169, ADR-0049 — maintainer-ruled 2026-08-24)', () => { +describe('contributes.kinds[].globs retirement (ADR-0049 — maintainer-ruled 2026-08-24)', () => { // The sub-field promised glob-driven file-type discovery that actually runs // off the metadata type registry's `filePatterns` — which `contributes.kinds` // does not extend — so an authored `globs` was stored, served back, and never @@ -511,7 +511,7 @@ describe('contributes.kinds[].globs retirement (#11169, ADR-0049 — maintainer- }); }); -describe('dead-container retirement (#11332, ADR-0049 — tombstoned, not deleted)', () => { +describe('dead-container retirement (ADR-0049 — tombstoned, not deleted)', () => { // Three top-level manifest containers had ZERO reads of the container itself // monorepo-wide (objectstack + objectui + cloud, controlled census), which // settles every key beneath them at once — a key cannot be read if the @@ -667,7 +667,7 @@ describe('manifest.id — reverse-domain identifier', () => { expect(ManifestSchema.safeParse({ ...legal('com.example.app'), namespace: 'my_app' }).success).toBe(true); }); - describe('the refusal carries a remedy (#4001)', () => { + describe('the refusal carries a remedy', () => { const refusalFor = (id: string) => { const r = ManifestSchema.safeParse(legal(id)); expect(r.success).toBe(false); diff --git a/packages/spec/src/kernel/metadata-authoring-lint.test.ts b/packages/spec/src/kernel/metadata-authoring-lint.test.ts index 30c3d359039..cb956561fb2 100644 --- a/packages/spec/src/kernel/metadata-authoring-lint.test.ts +++ b/packages/spec/src/kernel/metadata-authoring-lint.test.ts @@ -49,7 +49,7 @@ const lintAuthoring = (raw: unknown) => lintUnknownAuthoringKeys(raw, ObjectStac */ const VIEW_ENTRY = { name: 'v1', object: 'task', list: { columns: ['title'] }, bogusViewKey: 1 }; -describe('coverage derivation (#3786 — no third hand-written list)', () => { +describe('coverage derivation (no third hand-written list)', () => { it('spans the non-strict population, not a sample', () => { // #4148 covered object+field: 2 surfaces. The point of this walker is the // rest. If the derivation regresses to a handful, the "evidence base" for @@ -92,7 +92,7 @@ describe('coverage derivation (#3786 — no third hand-written list)', () => { } }); - it('reads posture from the schema the PARSE applies, not the type registry (#10039)', () => { + it('reads posture from the schema the PARSE applies, not the type registry', () => { // `view` was counted as lint-covered because the posture came from // `getMetadataTypeSchema('view')` — `ViewMetadataSchema`, the strip-mode // UNION over persisted view BODIES. What `defineStack` actually applies to @@ -181,7 +181,7 @@ describe('coverage derivation (#3786 — no third hand-written list)', () => { }); }); -describe('the #4148 behaviours survive the generalization', () => { +describe('the object/field unknown-key warnings survive the generalization', () => { const stackWith = (obj: Record, field: Record) => ({ objects: [ { name: 'crm_case', label: 'Case', fields: { owner: { label: 'Owner', type: 'text', ...field } }, ...obj }, @@ -301,7 +301,7 @@ describe('the #4148 behaviours survive the generalization', () => { }); }); -describe('nested descent (#4001 evidence phase)', () => { +describe('nested descent (the evidence base for the strict tiers)', () => { // Before this the walk stopped at each item's top level plus a hard-coded // hop into `object.fields`, leaving 227 strip-mode objects below those roots // reporting nothing. These pin the four structural moves the descent makes @@ -436,7 +436,7 @@ describe('nested descent (#4001 evidence phase)', () => { }); }); -describe('top-level stack keys (#4167 → #8687)', () => { +describe('top-level stack keys (named, then refused at parse)', () => { const lint = (raw: unknown) => lintUnknownStackKeys(raw, ObjectStackDefinitionSchema); // GRADUATION (#8687): `ObjectStackDefinitionSchema` is now `.strict()`, so @@ -518,7 +518,7 @@ describe('STACK_KEY_GUIDANCE does not rot', () => { } }); - it('every runtime member is a key the schema now declares (#8687)', () => { + it('every runtime member is a key the schema now declares', () => { // Until #8687 this pin ran the other way: `onEnable` had to be excluded // AND undeclared, because the exclusion list was what kept the lint from // calling an honoured-but-undeclared member "dropped at load". The strict @@ -545,7 +545,7 @@ describe('STACK_KEY_GUIDANCE does not rot', () => { }); }); -describe('one voice, and a single report per record (#10039)', () => { +describe('one voice, and a single report per record', () => { // The card's measured repro, kept in the shape it was filed in. An otherwise // VALID view container (it has `list`, so nothing else is wrong with it) plus // one undeclared key used to produce BOTH: diff --git a/packages/spec/src/kernel/metadata-customization-retirement.test.ts b/packages/spec/src/kernel/metadata-customization-retirement.test.ts index a7ca0bb5129..795f19d4b0b 100644 --- a/packages/spec/src/kernel/metadata-customization-retirement.test.ts +++ b/packages/spec/src/kernel/metadata-customization-retirement.test.ts @@ -31,7 +31,7 @@ import { MetadataManagerConfigSchema } from './metadata-loader.zod'; // directory: refusal, the issue `code`, the `path` naming WHICH key was // refused, and the prescription text (#5240: where the wording is the // contract, pin the wording). -describe('[#13135] paper metadata-customization protocol retirement', () => { +describe('paper metadata-customization protocol retirement', () => { /** A config that is valid except for whatever the individual test adds. */ const baseConfig = { storage: {} } as const; diff --git a/packages/spec/src/kernel/metadata-loader.test.ts b/packages/spec/src/kernel/metadata-loader.test.ts index 47de6847424..5bcaecaadd2 100644 --- a/packages/spec/src/kernel/metadata-loader.test.ts +++ b/packages/spec/src/kernel/metadata-loader.test.ts @@ -112,7 +112,7 @@ describe('MetadataManagerConfig', () => { // (nothing read the outer block), so `cache.ttl` now prescribes deletion — an // author upgrading from a published 17.x sees ONE hop, never a rename to a key // that is itself a tombstone. -describe('cache.ttl → deleted (absorbed by #15624), cache.databaseLoader.ttl → ttlMs (#14478)', () => { +describe('cache.ttl → deleted (the unread outer block is retired), cache.databaseLoader.ttl → ttlMs', () => { it('REFUSES the outer `cache.ttl` with a DELETION naming the live `cache.databaseLoader.ttlMs` — not a rename to the retired `ttlSeconds`', () => { const result = MetadataManagerConfigSchema.safeParse({ cache: { ttl: 3600 } }); expect(result.success).toBe(false); @@ -158,7 +158,7 @@ describe('cache.ttl → deleted (absorbed by #15624), cache.databaseLoader.ttl // and nothing else to `new DatabaseLoader({ cache })`. All three are retiredKey // tombstones; the prescription names the live nested half. Nothing in the // runtime changed — the pins below are about the ACCEPT face only. -describe('cache.{enabled, ttlSeconds, maxSize} are retired; cache.databaseLoader is the only live half (#15624)', () => { +describe('cache.{enabled, ttlSeconds, maxSize} are retired; cache.databaseLoader is the only live half', () => { const RETIRED = [ { key: 'enabled', value: false, live: /`cache\.databaseLoader`; its `enabled` is the switch that is honoured/s }, { key: 'ttlSeconds', value: 60, live: /`cache\.databaseLoader\.ttlMs` \(milliseconds, default 60000\)/s }, diff --git a/packages/spec/src/kernel/metadata-plugin.test.ts b/packages/spec/src/kernel/metadata-plugin.test.ts index 79a01f6a331..0ea7b7844b8 100644 --- a/packages/spec/src/kernel/metadata-plugin.test.ts +++ b/packages/spec/src/kernel/metadata-plugin.test.ts @@ -41,7 +41,7 @@ describe('MetadataPluginProtocol', () => { expect(() => MetadataTypeSchema.parse('approval')).toThrow(); }); - it('should reject `validation` as a metadata type (#4509: rules are inline object.validations[])', () => { + it('should reject `validation` as a metadata type (rules are inline object.validations[])', () => { // ADR-0088 retirement. A standalone rule had no object-binding key — // ValidationRuleSchema carries none and every variant is strict — so an // item authored as its own artifact bound to nothing and intercepted no @@ -243,7 +243,7 @@ describe('MetadataPluginProtocol', () => { // compile-time (typeof import is type-level only — no runtime barrel // load): if either bare name is re-added here, the conditional type flips // to `true` and the `false` assignment fails `tsc --noEmit`. - it('does not re-expose the bare MetadataEvent/MetadataBulkRegisterRequest names from ./kernel (#4587)', () => { + it('does not re-expose the bare MetadataEvent/MetadataBulkRegisterRequest names from ./kernel', () => { type MetadataPluginModule = typeof import('./metadata-plugin.zod'); const hasEventSchema: 'MetadataEventSchema' extends keyof MetadataPluginModule ? true diff --git a/packages/spec/src/kernel/metadata-type-api-registration.test.ts b/packages/spec/src/kernel/metadata-type-api-registration.test.ts index 1fb93b1508b..d3acf15602f 100644 --- a/packages/spec/src/kernel/metadata-type-api-registration.test.ts +++ b/packages/spec/src/kernel/metadata-type-api-registration.test.ts @@ -98,7 +98,7 @@ describe('`api` is a declared metadata kind', () => { expect(getMetadataTypeSchema('api')).toBeDefined(); }); - it('resolves to ApiEndpointSchema — the one endpoint shape (#4939 convergence)', () => { + it('resolves to ApiEndpointSchema — the one endpoint shape', () => { // Identity, not "some schema": `packages/spec/src/api` deliberately retired // its rival endpoint shapes down to this one, and a binding to a lookalike // would silently reintroduce the second dialect that retirement removed. @@ -131,11 +131,11 @@ describe('`api` registry flags — the authorization verdict, written down', () // implementation first, declaration second. Until then these pins are what // makes a silent re-flip loud. - it('declares `allowRuntimeCreate: false` — the runtime create door is retired (#5488)', () => { + it('declares `allowRuntimeCreate: false` — the runtime create door is retired', () => { expect(apiEntry()!.allowRuntimeCreate).toBe(false); }); - it('IS code-only: no runtime write channel is declared (#5086 refuses the inlet)', () => { + it('IS code-only: no runtime write channel is declared (PUT /meta refuses the inlet)', () => { // The exact predicate #5086 (PR #5263) refuses on, spelled as the gate // spells it. `true` here is what makes `PUT /api/v1/meta/api/:name` answer // 403 `NOT_CREATABLE` instead of 200 "Saved" — in draft mode too, since the @@ -189,7 +189,7 @@ describe('the declaration shape door (artifact / publish route — see the heade } }); - it('a headless body parses at the shape door and is refused by the GATE, naming the missing half (#10338)', () => { + it('a headless body parses at the shape door and is refused by the GATE, naming the missing half', () => { // Until commit d2619fd0c the VOCABULARY refused this body for its missing `target`. // That requirement was a dead letter for `object_operation` — nothing // reads `target` for that type — so the key is optional now, and "no diff --git a/packages/spec/src/kernel/metadata-type-field-registration.test.ts b/packages/spec/src/kernel/metadata-type-field-registration.test.ts index b2909068abf..b6173164c2c 100644 --- a/packages/spec/src/kernel/metadata-type-field-registration.test.ts +++ b/packages/spec/src/kernel/metadata-type-field-registration.test.ts @@ -77,11 +77,11 @@ describe('`field` registry flags — the authorization verdict, written down', ( // record rather than quiet — and these pins are what make a silent re-flip // loud from here on. - it('declares `allowRuntimeCreate: false` — the runtime create door is retired (#7893)', () => { + it('declares `allowRuntimeCreate: false` — the runtime create door is retired', () => { expect(fieldEntry()!.allowRuntimeCreate).toBe(false); }); - it('IS code-only: no runtime write channel is declared (#5086 refuses the inlet)', () => { + it('IS code-only: no runtime write channel is declared (PUT /meta refuses the inlet)', () => { // The exact predicate #5086 (PR #5263) refuses on, spelled as the gate // spells it. `true` here is what makes PUT /api/v1/meta/field/:name answer // 403 `NOT_CREATABLE` instead of 200 "Saved" — in draft mode too, since the @@ -91,7 +91,7 @@ describe('`field` registry flags — the authorization verdict, written down', ( expect(codeOnly).toBe(true); }); - it('declares `allowOrgOverride: false` — UNCHANGED, #7743’s overlay refusal stays', () => { + it('declares `allowOrgOverride: false` — UNCHANGED, the field overlay refusal stays', () => { // Binding carry-over of the 2026-08-12 ruling. This card closed the create // tier; the override tier was already closed and must not move in either // direction as a side effect. diff --git a/packages/spec/src/kernel/metadata-type-redaction.test.ts b/packages/spec/src/kernel/metadata-type-redaction.test.ts index cdb939dd852..97d653ed635 100644 --- a/packages/spec/src/kernel/metadata-type-redaction.test.ts +++ b/packages/spec/src/kernel/metadata-type-redaction.test.ts @@ -157,7 +157,7 @@ describe('FAIL-CLOSED: the datasource redactor is a BUILT-IN, not a plugin regis }); }); -describe('absence is distinguishable from "nothing to redact" (#8154 consumer contract)', () => { +describe('absence is distinguishable from "nothing to redact" (the consumer contract of the per-type redaction hook)', () => { it('a type with no redactor answers undefined — a fact, not a failure', () => { expect(getMetadataTypeRedactor('object')).toBeUndefined(); expect(getMetadataTypeRedactor('view')).toBeUndefined(); @@ -172,7 +172,7 @@ describe('absence is distinguishable from "nothing to redact" (#8154 consumer co }); }); -describe('stored metadata ROWS — the family-wide seam (#21120)', () => { +describe('stored metadata ROWS — the family-wide seam every exit routes through', () => { // A datasource body as it is stored in sys_metadata.metadata: serialized JSON // carrying credential material the datasource redactor withholds. const storedDatasourceBody = () => diff --git a/packages/spec/src/kernel/metadata-type-schemas.test.ts b/packages/spec/src/kernel/metadata-type-schemas.test.ts index 4fdcc9bd422..30cdf2f2cbf 100644 --- a/packages/spec/src/kernel/metadata-type-schemas.test.ts +++ b/packages/spec/src/kernel/metadata-type-schemas.test.ts @@ -280,7 +280,7 @@ const UNDECLARED_ENVELOPE_UNREGISTERED = new Set([]); * `connector` is not, and choosing between them is #2657's decision to make, not * this suite's. */ -describe('#6931 — the envelope invariant also covers UNREGISTERED_KIND_SCHEMAS', () => { +describe('the envelope invariant also covers UNREGISTERED_KIND_SCHEMAS', () => { const bound = listUnregisteredKindSchemaTypes(); it('is a non-empty set — guards the derivation returning nothing', () => { @@ -289,7 +289,7 @@ describe('#6931 — the envelope invariant also covers UNREGISTERED_KIND_SCHEMAS expect(bound.length).toBeGreaterThan(0); }); - it('stays OUT of the registered-kind set — the #6245 fence, pinned', () => { + it('stays OUT of the registered-kind set — the bound-but-unregistered fence, pinned', () => { // The scope fence, made mechanical: enrollment here must never leak into // `listMetadataTypeSchemaTypes()`, which is what would attach the KIND // obligations #2657 has not decided to attach. Should #2657 later resolve to @@ -419,7 +419,7 @@ function arrayElementOf(schema: unknown, depth = 0): unknown { } } -describe('#10194 — each bound entry IS its stack collection\'s schema', () => { +describe('each bound entry IS its stack collection\'s schema', () => { it('the mapping table covers exactly the bound set', () => { expect(Object.keys(STACK_COLLECTION_OF).sort()).toEqual(listUnregisteredKindSchemaTypes()); }); @@ -578,7 +578,7 @@ function topLevelPosture(schema: unknown, depth = 0): 'strict' | 'strip' | null } } -describe('#4001 — registered-type closure is derived, not tallied', () => { +describe('registered-type closure is derived, not tallied', () => { const types = listMetadataTypeSchemaTypes(); it.each(types.filter((t) => !STILL_STRIP.has(t)))('%s REJECTS unknown keys', (type) => { diff --git a/packages/spec/src/kernel/package-dependency-dual-source.test.ts b/packages/spec/src/kernel/package-dependency-dual-source.test.ts index 4825e2a43fc..b57ebad5b07 100644 --- a/packages/spec/src/kernel/package-dependency-dual-source.test.ts +++ b/packages/spec/src/kernel/package-dependency-dual-source.test.ts @@ -45,7 +45,7 @@ import { // (green to the dual-source gate — one declaration, many entries — but a lie // to anyone reading `./kernel`, and independently rejected at BUILD time by // RENAMED_DEFS invariant 3, "the source def is still emitted"). -describe('[#4741] PackageDependency dual-source retirement (C7)', () => { +describe('PackageDependency dual-source retirement (C7)', () => { it('resolves the export surface: one owner per name, across every public entry', () => { // Anti-vacuity: the baseline must cover the real surface. (This used to // enumerate package.json's exports map and build its own `ts.createProgram` diff --git a/packages/spec/src/kernel/package-upgrade.test.ts b/packages/spec/src/kernel/package-upgrade.test.ts index b5dd7bb082a..0a9f6207062 100644 --- a/packages/spec/src/kernel/package-upgrade.test.ts +++ b/packages/spec/src/kernel/package-upgrade.test.ts @@ -284,7 +284,7 @@ describe('RollbackPackageResponseSchema', () => { // #15678 (stack card 3/6 of #14478) — ruling B: the unit of a duration-shaped // number lives in the key NAME. The old spelling is a `retiredKey()` tombstone, // so the refusal carries the RENAME rather than a bare unrecognized-key error. -describe('UpgradePlan.estimatedDuration carries its unit (#15678)', () => { +describe('UpgradePlan.estimatedDuration carries its unit', () => { const basePlan = { packageId: 'com.acme.crm', fromVersion: '1.0.0', diff --git a/packages/spec/src/kernel/platform-capabilities.test.ts b/packages/spec/src/kernel/platform-capabilities.test.ts index b2027bedf5e..dc7e00a1c9d 100644 --- a/packages/spec/src/kernel/platform-capabilities.test.ts +++ b/packages/spec/src/kernel/platform-capabilities.test.ts @@ -30,7 +30,7 @@ describe('PLATFORM_CAPABILITY_TOKENS', () => { } }); - it('contains no camelCase legacy spellings (aliases removed, #3308)', () => { + it('contains no camelCase legacy spellings (aliases removed)', () => { for (const legacy of ['aiStudio', 'aiSeat']) { expect(PLATFORM_CAPABILITY_TOKENS).not.toContain(legacy); } @@ -44,7 +44,7 @@ describe('isKnownPlatformCapability', () => { expect(isKnownPlatformCapability('governance')).toBe(true); }); - it('rejects the removed camelCase aliases and typos (no canonicalization, #3308)', () => { + it('rejects the removed camelCase aliases and typos (no canonicalization)', () => { expect(isKnownPlatformCapability('aiStudio')).toBe(false); expect(isKnownPlatformCapability('aiSeat')).toBe(false); expect(isKnownPlatformCapability('automations')).toBe(false); @@ -77,7 +77,7 @@ describe('PLATFORM_CAPABILITY_PROVIDERS', () => { // cross-registry drift pins (edition agreement with the token-keyed map, the // serve-resolver exclusions) live in the CLI's // `serve-capability-vocabulary.test.ts` beside the map's own 1:1 pins. -describe('PLATFORM_PLUGIN_WIRED_RUNTIMES (#11263)', () => { +describe('PLATFORM_PLUGIN_WIRED_RUNTIMES — runtimes wired by plugins[], not by a token', () => { it('is frozen and non-empty', () => { expect(Object.isFrozen(PLATFORM_PLUGIN_WIRED_RUNTIMES)).toBe(true); expect(Object.keys(PLATFORM_PLUGIN_WIRED_RUNTIMES).length).toBeGreaterThan(0); @@ -118,7 +118,7 @@ describe('PLATFORM_PLUGIN_WIRED_RUNTIMES (#11263)', () => { }); }); -describe('classifyRequiredCapability (#3366)', () => { +describe('classifyRequiredCapability — preflight for an installable provider in this edition', () => { const allInstalled = () => true; const noneInstalled = () => false; @@ -313,7 +313,7 @@ describe('PLATFORM_ALWAYS_ON_CAPABILITIES', () => { * ("a token advertising a store that is not there"), and the reason the split * exists rather than a rename. */ -describe("package-registry carve-out (#17676 ruling A')", () => { +describe("package-registry carve-out — its persistence is always-on core, split from `marketplace`", () => { it('is its own vocabulary token — the persistence is named, not spelled `marketplace`', () => { expect(PLATFORM_CAPABILITY_TOKENS).toContain('package-registry'); expect(isKnownPlatformCapability('package-registry')).toBe(true); diff --git a/packages/spec/src/kernel/plugin-lifecycle-advanced-retirement.test.ts b/packages/spec/src/kernel/plugin-lifecycle-advanced-retirement.test.ts index 29f67361a9b..8d52601d839 100644 --- a/packages/spec/src/kernel/plugin-lifecycle-advanced-retirement.test.ts +++ b/packages/spec/src/kernel/plugin-lifecycle-advanced-retirement.test.ts @@ -40,7 +40,7 @@ import { // // Form follows commit 2c86fe3ea / #4988 / #5055: resolved symbol identity over every // public entry via the build-time `export-origins/` artifact. -describe('[#11825] kernel/ AdvancedPluginLifecycleConfig retirement', () => { +describe('kernel/ AdvancedPluginLifecycleConfig retirement', () => { /** The 9 names the retired defs exported (3 schema consts + 6 types). */ const RETIRED_NAMES = [ 'AdvancedPluginLifecycleConfigSchema', @@ -96,11 +96,11 @@ describe('[#11825] kernel/ AdvancedPluginLifecycleConfig retirement', () => { const RETIRED_BY_12340 = ['DistributedStateConfigSchema', 'DistributedStateConfig', 'DistributedStateConfigParsed'] as const; - it('[#12340] the distributed-state vocabulary has zero holders too', () => { + it('the distributed-state vocabulary has zero holders too', () => { // Anti-vacuity: the same baseline the sibling assertion relies on. expect(exportNamesOf('./kernel').length).toBeGreaterThan(50); for (const name of RETIRED_BY_12340) { - expect(holdersOf(name), `${name} must have zero holders after #12340`).toEqual([]); + expect(holdersOf(name), `${name} must have zero holders after its retirement`).toEqual([]); } // The keep it was carved out of is UNTOUCHED — this is the assertion that // makes the removal a narrowing rather than the "too-wide sweep" the @@ -121,7 +121,7 @@ describe('[#11825] kernel/ AdvancedPluginLifecycleConfig retirement', () => { // ── ABSENCE (every entry, not just ./kernel) ────────────────────────── for (const name of RETIRED_NAMES) { - expect(holdersOf(name), `${name} must have zero holders after #11825`).toEqual([]); + expect(holdersOf(name), `${name} must have zero holders after its retirement`).toEqual([]); } // ── SURVIVAL ────────────────────────────────────────────────────────── @@ -138,7 +138,7 @@ describe('[#11825] kernel/ AdvancedPluginLifecycleConfig retirement', () => { 'GracefulDegradationSchema', 'PluginUpdateStrategySchema', ]) { - expect(kernel, `${name} must not be exported after #11825`).not.toHaveProperty(name); + expect(kernel, `${name} must not be exported after its retirement`).not.toHaveProperty(name); } // Anti-vacuity: the barrel really resolved and still exports the kept // library vocabularies (the #4914 §2 keep, restated by this ruling). diff --git a/packages/spec/src/kernel/plugin-lifecycle-advanced.test.ts b/packages/spec/src/kernel/plugin-lifecycle-advanced.test.ts index 69de510bfd9..4217e390a78 100644 --- a/packages/spec/src/kernel/plugin-lifecycle-advanced.test.ts +++ b/packages/spec/src/kernel/plugin-lifecycle-advanced.test.ts @@ -81,7 +81,7 @@ describe('Plugin Lifecycle Advanced Schemas', () => { } as const; for (const [key, value] of Object.entries(RETIRED_RESTART_KEYS)) { - it(`refuses ${key} with the retirement prescription (#12032)`, () => { + it(`refuses ${key} with the retirement prescription`, () => { const result = PluginHealthCheckSchema.safeParse( { [key]: value } as Record ); @@ -272,7 +272,7 @@ describe('Plugin Lifecycle Advanced Schemas', () => { expect(result).not.toHaveProperty('distributedConfig'); }); - it('refuses watchPatterns with the retirement prescription (#12428)', () => { + it('refuses watchPatterns with the retirement prescription', () => { // Unlike the distributedConfig pin above, this one asserts a REFUSAL, not // a strip: `watchPatterns` is `retiredKey()`-tombstoned. A bare deletion // was tried first and `gen:schema` gate (a) refused it — this object is @@ -328,7 +328,7 @@ describe('Plugin Lifecycle Advanced Schemas', () => { // number lives in the key NAME. Both old spellings are `retiredKey()` // tombstones inside the live `metrics` block, so the refusal carries the RENAME // and the block's other members must keep parsing beside it. -describe('PluginHealthReport metrics durations carry their unit (#15678)', () => { +describe('PluginHealthReport metrics durations carry their unit', () => { const base = { status: 'healthy' as const, timestamp: new Date().toISOString() }; it.each([ @@ -375,7 +375,7 @@ describe('PluginHealthReport metrics durations carry their unit (#15678)', () => // value carried in milliseconds. All three old spellings are `retiredKey()` // tombstones — neither object is `.strict()`, so a bare deletion would be a // silent strip. -describe('plugin lifecycle durations carry their unit (#17780, #14478)', () => { +describe('plugin lifecycle durations carry their unit', () => { it.each([ ['interval', 'intervalMs', 60000], ['timeout', 'timeoutMs', 10000], @@ -435,7 +435,7 @@ describe('plugin lifecycle durations carry their unit (#17780, #14478)', () => { // `DurationMs` is `z.number().int().nonnegative()` and this key declared // `z.number().int().min(0)`, so the accepted set is UNCHANGED — the pins below // are about what the declaration now refuses loudly at the authoring site. -describe('HotReloadConfig.shutdownTimeout declares milliseconds (#18124)', () => { +describe('HotReloadConfig.shutdownTimeout declares milliseconds', () => { it('refuses a fractional millisecond count', () => { const result = HotReloadConfigSchema.safeParse({ shutdownTimeout: 30000.5 }); expect(result.success).toBe(false); diff --git a/packages/spec/src/kernel/plugin-loading-retirement.test.ts b/packages/spec/src/kernel/plugin-loading-retirement.test.ts index 60717f175c0..081de1c5875 100644 --- a/packages/spec/src/kernel/plugin-loading-retirement.test.ts +++ b/packages/spec/src/kernel/plugin-loading-retirement.test.ts @@ -37,7 +37,7 @@ import { ManifestSchema } from './manifest.zod'; // satisfies what #6142 is actually after: it goes red if the refusal moves to // the wrong key, loses its code, or stops carrying the fix — none of which a // bare `toThrow()` can see. -describe('[#4914] manifest.loading retirement', () => { +describe('manifest.loading retirement', () => { /** A manifest that is valid except for whatever the individual test adds. */ const baseManifest = { id: 'com.example.plugin', @@ -122,7 +122,7 @@ describe('[#4914] manifest.loading retirement', () => { 'PluginPerformanceMonitoringSchema', ]; for (const name of retired) { - expect(kernel, `${name} must not be exported after #4914`).not.toHaveProperty(name); + expect(kernel, `${name} must not be exported after its retirement`).not.toHaveProperty(name); } // Anti-vacuity: this pin is only meaningful if the barrel really resolved diff --git a/packages/spec/src/kernel/plugin-runtime-retirement.test.ts b/packages/spec/src/kernel/plugin-runtime-retirement.test.ts index b6295f00c94..af95a6ea895 100644 --- a/packages/spec/src/kernel/plugin-runtime-retirement.test.ts +++ b/packages/spec/src/kernel/plugin-runtime-retirement.test.ts @@ -40,7 +40,7 @@ import { // honest — the C14/C15 lesson); // 3. point the entry enumeration at nothing → the anti-vacuity guards trip // instead of the suite passing silently. -describe('[#4834] plugin-runtime family removal — no entry exports any of the five names', () => { +describe('plugin-runtime family removal — no entry exports any of the five names', () => { /** The five schema names + every type alias they published. */ const RETIRED = [ 'DynamicLoadRequestSchema', diff --git a/packages/spec/src/kernel/plugin-runtime-tier-truthful-text.test.ts b/packages/spec/src/kernel/plugin-runtime-tier-truthful-text.test.ts index 5f219e7779a..4bb8ad88867 100644 --- a/packages/spec/src/kernel/plugin-runtime-tier-truthful-text.test.ts +++ b/packages/spec/src/kernel/plugin-runtime-tier-truthful-text.test.ts @@ -50,7 +50,7 @@ const SAYS_LOAD_SIDE_NOT_ENFORCED = /load-side enforcement is NOT implemented/i; */ const SAYS_GRANT_REGISTERED_NOT_ENFORCED = /REGISTERED on the PluginPermissionEnforcer at load and queried by\s+nothing/i; -describe('[#11330] manifest.runtime trust-tier text is truthful', () => { +describe('manifest.runtime trust-tier text is truthful', () => { const baseManifest = { id: 'com.example.plugin', namespace: 'example', @@ -107,7 +107,7 @@ describe('[#11330] manifest.runtime trust-tier text is truthful', () => { ).not.toMatch(/trust tier \(`manifest\.runtime`\) and the permission declarations, which are enforced/); }); - it('[#17147] states the PERMISSIONS half truthfully too — the handoff landed', () => { + it('states the PERMISSIONS half truthfully too — the handoff landed', () => { // The coordination pin this replaces read // `expect(message).toContain('the permission declarations, which are enforced')` // and existed to go RED the day commit aaacf1d5c corrected the other half of the @@ -139,7 +139,7 @@ describe('[#11330] manifest.runtime trust-tier text is truthful', () => { ).not.toMatch(/permission declarations, which are enforced/); }); - it('[#17147] corrects the permissions half in the shipped ADR-0087 D3 entry too', () => { + it('corrects the permissions half in the shipped ADR-0087 D3 entry too', () => { // Same two-carrier problem the tier half had: the tombstone ships once in // the schema and once through this entry into `docs/protocol-upgrade-guide.md`. const text = loadingRetiredEntry.replacement; diff --git a/packages/spec/src/kernel/plugin-security-advanced.test.ts b/packages/spec/src/kernel/plugin-security-advanced.test.ts index 21ce41bdfc5..8fd5a1c32c7 100644 --- a/packages/spec/src/kernel/plugin-security-advanced.test.ts +++ b/packages/spec/src/kernel/plugin-security-advanced.test.ts @@ -314,7 +314,7 @@ describe('Plugin Security Advanced Schemas', () => { // (ms, seconds, days, hours) and none said so in its name. All four old // spellings are `retiredKey()` tombstones inside live blocks, so the refusal // carries the RENAME and each block's other members keep parsing beside it. -describe('Plugin security durations carry their unit (#15678)', () => { +describe('Plugin security durations carry their unit', () => { it('SandboxConfig REFUSES the retired `process.timeout` with the rename in the message', () => { const result = SandboxConfigSchema.safeParse({ process: { timeout: 30000 } }); expect(result.success).toBe(false); @@ -410,7 +410,7 @@ describe('Plugin security durations carry their unit (#15678)', () => { // slot now pins the OPPOSITE fact: the bare spelling is refused with the rename // prescription, and the suffixed spelling parses at the same magnitude. The // guard succeeded by failing — ⛔ it was not deleted, weakened or skipped. -describe('RuntimeConfig.resourceLimits.timeout → timeoutMs (#15939 ruling A, #14478)', () => { +describe('RuntimeConfig.resourceLimits.timeout → timeoutMs (its unit was named in JSDoc only)', () => { it('REFUSES the retired `resourceLimits.timeout` with the rename to `timeoutMs`', () => { const result = RuntimeConfigSchema.safeParse({ engine: 'process' as const, @@ -477,7 +477,7 @@ describe('RuntimeConfig.resourceLimits.timeout → timeoutMs (#15939 ruling A, # // ⚠️ No gate can catch this key losing its marker, because a marker's absence is // how an undeclared key looks — the census simply stops admitting it. This pin is // the only guard, exactly as the twin's pin in `system/object-storage.test.ts` is. -describe('KernelSecurityPolicy.cors.maxAge declares seconds by mirror (#18124)', () => { +describe('KernelSecurityPolicy.cors.maxAge declares seconds by mirror', () => { const policy = { cors: { allowedOrigins: ['https://app.example.com'], diff --git a/packages/spec/src/kernel/plugin-security-scan-result-retirement.test.ts b/packages/spec/src/kernel/plugin-security-scan-result-retirement.test.ts index 33f307e149e..786a102d9a0 100644 --- a/packages/spec/src/kernel/plugin-security-scan-result-retirement.test.ts +++ b/packages/spec/src/kernel/plugin-security-scan-result-retirement.test.ts @@ -42,7 +42,7 @@ const baseManifest = { sandbox: {}, } as const; -describe('[#15932] plugin-security scan-result retirement', () => { +describe('plugin-security scan-result retirement', () => { it('REJECTS an authored `scanResults` array, naming the key and carrying the fix', () => { const result = PluginSecurityManifestSchema.safeParse({ ...baseManifest, @@ -120,7 +120,7 @@ describe('[#15932] plugin-security scan-result retirement', () => { it('does not export the retired scan-result defs from ./kernel', async () => { const kernel = await import('./index'); for (const name of ['KernelSecurityScanResultSchema', 'KernelSecurityVulnerabilitySchema']) { - expect(kernel, `${name} must not be exported after #15932`).not.toHaveProperty(name); + expect(kernel, `${name} must not be exported after its retirement`).not.toHaveProperty(name); } // Anti-vacuity: this pin means nothing unless the barrel really resolved and diff --git a/packages/spec/src/kernel/plugin-security.test.ts b/packages/spec/src/kernel/plugin-security.test.ts index 6b60b876a36..679caf730c9 100644 --- a/packages/spec/src/kernel/plugin-security.test.ts +++ b/packages/spec/src/kernel/plugin-security.test.ts @@ -344,7 +344,7 @@ describe('Plugin Security Protocol', () => { // #15678 (stack card 3/6 of #14478) — ruling B: the unit of a duration-shaped // number lives in the key NAME. The old spelling is a `retiredKey()` tombstone, // so the refusal carries the RENAME rather than a bare unrecognized-key error. -describe('PackageDependencyResolutionResult.resolvedIn carries its unit (#15678)', () => { +describe('PackageDependencyResolutionResult.resolvedIn carries its unit', () => { const base = { status: 'success' as const, installOrder: ['com.acme.app'] }; it('REFUSES the retired `resolvedIn` with the rename in the message', () => { diff --git a/packages/spec/src/kernel/plugin-ui-required-keys.test.ts b/packages/spec/src/kernel/plugin-ui-required-keys.test.ts index 4e81f5441c5..b4c114a0d94 100644 --- a/packages/spec/src/kernel/plugin-ui-required-keys.test.ts +++ b/packages/spec/src/kernel/plugin-ui-required-keys.test.ts @@ -64,7 +64,7 @@ function issueShapes(input: unknown): Array<[string, string]> { return result.error.issues.map((i): [string, string] => [i.code, i.path.join('.')]); } -describe('A — a `ui` plugin without `staticPath` or `slug` fails PluginSchema.safeParse (#16334)', () => { +describe('A — a `ui` plugin without `staticPath` or `slug` fails PluginSchema.safeParse', () => { it('missing both: refused with one issue per key, in declaration order, path naming the key', () => { const keyless = without(without(UI_COMPLETE, 'staticPath'), 'slug'); expect(keyless).toEqual({ type: 'ui' }); @@ -140,7 +140,7 @@ describe('C — SCOPE: only `type: \'ui\'` owes the two keys', () => { }); }); -describe('D — the code is a member of the closed ADR-0112 vocabulary (#16449)', () => { +describe('D — the code is a member of the closed ADR-0112 vocabulary', () => { it('PLUGIN_UI_REQUIRED_KEY_MISSING parses against ErrorCode and is registered under @objectstack/spec', () => { // The #16404 ruling: a code that ships in `dist` is the published face, // door or no door. This one rides a zod issue and a boot refusal's diff --git a/packages/spec/src/kernel/plugin-versioning.test.ts b/packages/spec/src/kernel/plugin-versioning.test.ts index ca4e2367f4f..22a5cdda43c 100644 --- a/packages/spec/src/kernel/plugin-versioning.test.ts +++ b/packages/spec/src/kernel/plugin-versioning.test.ts @@ -498,7 +498,7 @@ describe('Plugin Versioning Schemas', () => { // number lives in the key NAME. The old spelling is a `retiredKey()` tombstone // inside the live `rollout` block, so the refusal carries the RENAME and the // block's unit-less `percentage` must keep parsing beside it. -describe('MultiVersionSupport rollout duration carries its unit (#15678)', () => { +describe('MultiVersionSupport rollout duration carries its unit', () => { it('REFUSES the retired `rollout.duration` with the rename in the message', () => { const result = MultiVersionSupportSchema.safeParse({ rollout: { strategy: 'canary' as const, duration: 3600000 }, diff --git a/packages/spec/src/kernel/plugin.test.ts b/packages/spec/src/kernel/plugin.test.ts index d6b5044628e..9cdc830a0ba 100644 --- a/packages/spec/src/kernel/plugin.test.ts +++ b/packages/spec/src/kernel/plugin.test.ts @@ -137,7 +137,7 @@ describe('`version` is SemVer 2.0.0, exactly — the canon for this concept', () // Case-preserving, which the standard requires and one sibling carrier used // to refuse. '1.0.0-Beta.1', '1.0.0+Build.5', - ])('accepts %s, which the pre-#16365 regex refused', (version) => { + ])('accepts %s, which the regex refused before the SemVer widening', (version) => { expect(parses(version)).toBe(true); }); @@ -217,7 +217,7 @@ describe('`version` is SemVer 2.0.0, exactly — the canon for this concept', () }); }); -describe('the lifecycle-hook family stays retired (#4212)', () => { +describe('the lifecycle-hook family stays retired', () => { it('PluginSchema declares none of the five hooks', () => { // The kernel's plugin contract is `init`/`start`/`destroy` // (`packages/core/src/types.ts`). The `onInstall` family was declared here diff --git a/packages/spec/src/kernel/preview-mode-retirement.test.ts b/packages/spec/src/kernel/preview-mode-retirement.test.ts index 7fef970baa0..df1a0fadb4f 100644 --- a/packages/spec/src/kernel/preview-mode-retirement.test.ts +++ b/packages/spec/src/kernel/preview-mode-retirement.test.ts @@ -52,7 +52,7 @@ import { // assert the strongest set this surface really has: refusal, the issue `code`, // the `path` naming WHICH site refused, and the prescription text (#5240: // where the wording is the contract, pin the wording). -describe("[#11846] RuntimeMode 'preview' retirement", () => { +describe("RuntimeMode 'preview' retirement", () => { it("no longer offers 'preview' as a mode", () => { expect(RuntimeMode.options).toEqual([ 'development', @@ -107,7 +107,7 @@ describe("[#11846] RuntimeMode 'preview' retirement", () => { }); }); -describe('[#11846] KernelContext.previewMode retirement', () => { +describe('KernelContext.previewMode retirement', () => { const baseContext = { instanceId: '550e8400-e29b-41d4-a716-446655440000', mode: 'production', @@ -170,7 +170,7 @@ describe('[#11846] KernelContext.previewMode retirement', () => { }); }); -describe('[#11846] kernel/PreviewModeConfig def retirement', () => { +describe('kernel/PreviewModeConfig def retirement', () => { /** The 3 names the retired def exported (1 schema const + 2 types). */ const RETIRED_NAMES = [ 'PreviewModeConfigSchema', @@ -190,7 +190,7 @@ describe('[#11846] kernel/PreviewModeConfig def retirement', () => { // ── ABSENCE (every entry, not just ./kernel) ────────────────────────── for (const name of RETIRED_NAMES) { - expect(holdersOf(name), `${name} must have zero holders after #11846`).toEqual([]); + expect(holdersOf(name), `${name} must have zero holders after its retirement`).toEqual([]); } // ── SURVIVAL ────────────────────────────────────────────────────────── diff --git a/packages/spec/src/kernel/repeater-item-titles.test.ts b/packages/spec/src/kernel/repeater-item-titles.test.ts index 1b328e49323..c73482201a0 100644 --- a/packages/spec/src/kernel/repeater-item-titles.test.ts +++ b/packages/spec/src/kernel/repeater-item-titles.test.ts @@ -271,7 +271,7 @@ function deriveCarriers(): Carrier[] { const CARRIERS = deriveCarriers(); const OBJECT_ROW_CARRIERS = CARRIERS.filter((c) => !c.scalarItems); -describe('#17232 — the repeater survey itself (controls before verdicts)', () => { +describe('the repeater survey itself (controls before verdicts)', () => { it('walks every form this package exports, and finds repeaters in exactly the forms that declare one', () => { // Lit control — the walk really ran. expect(FORMS.length).toBe(15); @@ -314,7 +314,7 @@ describe('#17232 — the repeater survey itself (controls before verdicts)', () }); }); -describe('#17232 — every repeater row property carries a JSON Schema title', () => { +describe('every repeater row property carries a JSON Schema title', () => { for (const carrier of OBJECT_ROW_CARRIERS) { const owed = LEDGER.has(carrier.id); it(`${carrier.id}${owed ? ' (ledger: still owed titles)' : ''}`, () => { @@ -343,7 +343,7 @@ describe('#17232 — every repeater row property carries a JSON Schema title', ( } }); - it('dashboard.header.actions stays titled — the one carrier #17227 closed', () => { + it('dashboard.header.actions stays titled — the one carrier already titled', () => { const c = CARRIERS.find((x) => x.id === 'dashboard:header.actions'); expect(c, 'dashboard.header.actions is a repeater').toBeDefined(); expect(c!.authorable).toEqual(['label', 'actionUrl', 'actionType', 'icon']); diff --git a/packages/spec/src/kernel/reports-capability-retirement.test.ts b/packages/spec/src/kernel/reports-capability-retirement.test.ts index 7c82ace707d..ae00fb53b08 100644 --- a/packages/spec/src/kernel/reports-capability-retirement.test.ts +++ b/packages/spec/src/kernel/reports-capability-retirement.test.ts @@ -45,7 +45,7 @@ function refusalOf(requires: string[]): { code?: string; status?: number; messag throw new Error(`defineStack accepted requires: ${JSON.stringify(requires)}`); } -describe('[#20102] the `reports` capability token is retired', () => { +describe('the `reports` capability token is retired', () => { it('is gone from the vocabulary and from the provider map', () => { expect(PLATFORM_CAPABILITY_TOKENS).not.toContain('reports'); expect(isKnownPlatformCapability('reports')).toBe(false); diff --git a/packages/spec/src/kernel/startup-orchestrator-retirement.test.ts b/packages/spec/src/kernel/startup-orchestrator-retirement.test.ts index ff960af018b..ac06ca69b52 100644 --- a/packages/spec/src/kernel/startup-orchestrator-retirement.test.ts +++ b/packages/spec/src/kernel/startup-orchestrator-retirement.test.ts @@ -43,7 +43,7 @@ import { // plus the D3 semantic entry `startup-orchestrator-retired` ARE the // declaration. Form follows #11825 / commit 2c86fe3ea / #4988: resolved symbol identity // over every public entry via the build-time `export-origins/` artifact. -describe('[#16059] startup orchestrator retirement', () => { +describe('startup orchestrator retirement', () => { /** The 8 names the retired defs and the retired interface exported. */ const RETIRED_NAMES = [ 'StartupOptionsSchema', @@ -82,7 +82,7 @@ describe('[#16059] startup orchestrator retirement', () => { // ── ABSENCE (every entry, not just the two that declared them) ───────── for (const name of RETIRED_NAMES) { - expect(holdersOf(name), `${name} must have zero holders after #16059`).toEqual([]); + expect(holdersOf(name), `${name} must have zero holders after its retirement`).toEqual([]); } // ── SURVIVAL ────────────────────────────────────────────────────────── @@ -103,7 +103,7 @@ describe('[#16059] startup orchestrator retirement', () => { 'HealthStatusSchema', 'StartupOrchestrationResultSchema', ]) { - expect(kernel, `${name} must not be exported after #16059`).not.toHaveProperty(name); + expect(kernel, `${name} must not be exported after its retirement`).not.toHaveProperty(name); } // Anti-vacuity: the barrel really resolved, and the kept contract stands. expect(kernel).toHaveProperty('PluginStartupResultSchema'); diff --git a/packages/spec/src/kernel/startup-orchestrator.test.ts b/packages/spec/src/kernel/startup-orchestrator.test.ts index 597ad3cbf84..e7e1a4525a0 100644 --- a/packages/spec/src/kernel/startup-orchestrator.test.ts +++ b/packages/spec/src/kernel/startup-orchestrator.test.ts @@ -72,7 +72,7 @@ describe('PluginStartupResultSchema — the shape the kernel produces', () => { // left with their defs on #16059 — a whole-def removal is strictly stronger // than "this one key is gone", and the retired-key registrations that dated // them stay in RETIRED_KEYS_BY_MAJOR[18] as the record of the narrower step. -describe('Startup result durations carry their unit (#15678)', () => { +describe('Startup result durations carry their unit', () => { it('REFUSES the retired `duration` with the rename in the message', () => { const result = PluginStartupResultSchema.safeParse({ pluginName: 'crm-plugin', @@ -91,7 +91,7 @@ describe('Startup result durations carry their unit (#15678)', () => { // not deletions, because this def keeps emitting and `@objectstack/core` // imports its type: a construction site still writing them meets the // prescription at the parse as well as at `tsc`. -describe('[#16059] the re-declared result refuses the members it dropped', () => { +describe('the re-declared result refuses the members it dropped', () => { it('REFUSES `plugin` and prescribes `pluginName`', () => { const result = PluginStartupResultSchema.safeParse({ pluginName: 'crm-plugin', From e0ad8f50af2b0cd0bc1a55add7246c8a4ebe2c2c Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 4 Oct 2026 11:44:28 +0000 Subject: [PATCH 2/2] test(spec): the repeater carrier title names what it was first given, not "already titled" twice Claude-Session: https://claude.ai/code/session_01T9u38rswFp5Rw8DswRUReJ Co-authored-by: Claude --- packages/spec/src/kernel/repeater-item-titles.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/spec/src/kernel/repeater-item-titles.test.ts b/packages/spec/src/kernel/repeater-item-titles.test.ts index c73482201a0..826afb020ab 100644 --- a/packages/spec/src/kernel/repeater-item-titles.test.ts +++ b/packages/spec/src/kernel/repeater-item-titles.test.ts @@ -343,7 +343,7 @@ describe('every repeater row property carries a JSON Schema title', () => { } }); - it('dashboard.header.actions stays titled — the one carrier already titled', () => { + it('dashboard.header.actions stays titled — the first carrier given item-level names', () => { const c = CARRIERS.find((x) => x.id === 'dashboard:header.actions'); expect(c, 'dashboard.header.actions is a repeater').toBeDefined(); expect(c!.authorable).toEqual(['label', 'actionUrl', 'actionType', 'icon']);