From a069bdb668fd1e49f78e3fa9a4d0e3ea58c3fe25 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 5 Nov 2026 23:09:55 +0000 Subject: [PATCH] docs(skills): name the pluralLabel exception to "an extension can add but never remove" An object extension that sets a new `label` and no `pluralLabel` clears the base's `pluralLabel` from the served object. The Object Extension Model sentence now names that exception. The token cost is paid in the same file by dropping the Lifecycle Hooks pointer's duplicate link to references/data-hooks.md. Co-authored-by: Claude Claude-Session: https://claude.ai/code/session_016WV4cx4foyi3wUWBrRHCmF --- .changeset/30466-extension-plurallabel-exception.md | 10 ++++++++++ skills/objectstack-data/SKILL.md | 5 +++-- 2 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 .changeset/30466-extension-plurallabel-exception.md diff --git a/.changeset/30466-extension-plurallabel-exception.md b/.changeset/30466-extension-plurallabel-exception.md new file mode 100644 index 00000000000..2fa5077fa6a --- /dev/null +++ b/.changeset/30466-extension-plurallabel-exception.md @@ -0,0 +1,10 @@ +--- +'@objectstack/skills': patch +--- + +docs(skills): an object extension that renames `label` without `pluralLabel` clears the base plural + +Clause-②: no +Metadata-protocol: none + +`objectstack-data` § Object Extension Model still says an extension can add but never remove, and now names the one exception the object fold has: an extension that sets a new `label` and no `pluralLabel` takes the base's `pluralLabel` off the served object unless a tenant authored that plural, so an author who renames an object sets both to keep a plural. An extension that repeats the label it extends removes nothing. The Lifecycle Hooks pointer line drops its second link to `references/data-hooks.md`, which the catalog list and the backfill paragraph already link. No schema, key or behaviour changes. diff --git a/skills/objectstack-data/SKILL.md b/skills/objectstack-data/SKILL.md index 682acf600aa..ee2f16edafa 100644 --- a/skills/objectstack-data/SKILL.md +++ b/skills/objectstack-data/SKILL.md @@ -337,7 +337,7 @@ See [rules/indexing.md](./rules/indexing.md) for composite indexes, unique scope refused), the retired `type` / `partial`, and partial / gin / gist indexes at the database layer. -→ Moved verbatim to [references/examples-objects.md](./references/examples-objects.md) § Lifecycle Hooks (the hooks reference itself is [references/data-hooks.md](./references/data-hooks.md)). +→ Moved verbatim to [references/examples-objects.md](./references/examples-objects.md) § Lifecycle Hooks. --- @@ -346,7 +346,8 @@ database layer. To add fields/validations/indexes to an object you do not own, author `defineObjectExtension({ extend, fields, fieldPatches, priority })` and register it on `defineStack({ objectExtensions: [...] })`. `priority` sets merge order (default -`200`, range `0–999`); an extension can add but never remove. ⛔ Not the same key +`200`, range `0–999`); an extension can add but never remove, except that a new +`label` without `pluralLabel` clears the base plural unless a tenant authored it (set both). ⛔ Not the same key as object-level `ownership` (the record-ownership enum `'user' | 'business_unit' | 'org' | 'none'`). Schema: `node_modules/@objectstack/spec/src/data/object.zod.ts` (`ObjectExtensionSchema`).