Repository navigation
docs(skills): name the pluralLabel exception to "an extension can add but never remove" - #30722
Conversation
… 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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cx4foyi3wUWBrRHCmF
|
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk Contract-review-claim: session_016WV4d1mkgEris4MHHLjtnk · head a069bdb · 2026-11-05T23:28Z |
|
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk Contract reviewServed-tier: Diff read as ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Trying to break the sentence: an extension on an object whose base has no plural — the delete is a no-op, the sentence's "clears" is vacuous but not false. A No must-fix. No should-fix. Implemented-by: VERDICT: PASS |
|
domain:skills#1 · os-elon-musk · session_016WV4d1mkgEris4MHHLjtnk 维护者速读
席位核对 — ACCEPT · head a069bdb
|
Requested by Elon · project thread
domain:skills#1 · os-elon-musk · session_016WV4cx4foyi3wUWBrRHCmF
Fixes #30466
Clause-②: no
Metadata-protocol: none
维护者速读
objectstack-data技能「对象扩展」一节仍说扩展“只能加、不能删”,但补上唯一的例外:扩展改了label却没给pluralLabel时,基础对象的复数名会被清掉(租户自己写的复数除外),要保留就两个一起写。pluralLabel不再准确;这是那次合同评审的 should-fix 2。skills/objectstack-data/SKILL.md第 349–350 行;规则出处packages/objectql/src/registry.ts的mergeObjectDefinitions(第 916 行)。node scripts/check-skills-token-ratchet.mjs | grep "objectstack-data/SKILL.md ",预期6122 / 6123。What changes
skills/objectstack-data/SKILL.md§ Object Extension Model keeps "an extension can add but never remove" and names the one exception: a newlabelwithoutpluralLabelclears the base plural unless a tenant authored it, so an author sets both.origin/main,packages/objectql/src/registry.tsmergeObjectDefinitions:if (extension.pluralLabel === undefined && extension.label !== merged.label && !yields('pluralLabel')) delete merged.pluralLabel;, inside theextension.label !== undefined && !yields('label')branch. So the plural survives when the extension repeats the running label, when the tenant authored the plural (the ADR-0029 D9.2a yield), or when the tenant authored the label (the label itself yields).references/data-hooks.md. That file is already linked from the catalog list (L46) and from the backfill paragraph (L160), so the parenthetical restated a link..changeset/30466-extension-plurallabel-exception.md:'@objectstack/skills': patch.Tests
Docs-only. No behaviour changes, so no test or ablation applies.
Acceptance notes
docs/adr/0029-kernel-object-ownership-and-platform-objects-decomposition.mdL472–473, "mergeObjectDefinitionsmerges fields additively (...) and has no expression for removal at all." Since PR fix(objectql,rest)!: serve an object an extension renames without the base's plural (#30391) #30459 it has one, forpluralLabel. No decision moves (the sentence argues about fields in an overlay); whether it gets an amendment note is the maintainer's.Verification
Skills readings (lines and tokens):
skills/objectstack-data/SKILL.md: 464 → 465 lines; 6116 → 6122 tokens (ceiling 6123, headroom 7 → 1). Net +6 after the same-file deletion, inside the existing headroom. The ceiling row is not touched.SKILL.md: 4534 → 4535 lines. Bundle total (whole shipped tree, ratchet reading): 226234 → 226240 tokens.Gates, head
a069bdb668(dispatch-gates --commands, 44 derived families, pluspnpm lint):pnpm lintexit 0.--ranreconciliation: "44 derived famil(ies) accounted for — 40 run, 4 NOT-MEASURED".check:doc-formula-expressionsfirst exited 3 (prerequisite); afterturbo run build --filter=@objectstack/formula --filter=@objectstack/lintit exits 0.check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closure,check:sourcemap-no-sources-content. Reason: exit 3, they need a whole-tree build. They read packagedist/output, which this docs-only diff does not change; CI measures them.COMMAND :: exit CODE record
Generated by Claude Code