Live-query projection for primaryKeyword. Lives on the mixin
(not on Stuff) because the field is mixin-gated: only
Perceptible-composed hosts have a keyword pool. The substrate's
prototype-chain walk unions this with Stuff.subscribableFields
at projection time. Non-Perceptible hosts contribute no
primaryKeyword descriptor; the substrate omits the field
from their wire records, same shape quantity uses on
Globbable.
dependsOnFields lists the leaf sources: the authored override
(primaryKeyword) AND the two fields the derived-pool head
folds in (name via NamedMixin, shortDescription via
VisibleMixin). Renaming or re-describing a Perceptible host
re-projects the keyword surface without an explicit setter
call. Shadow-lifecycle support rides on ShadowChangedEvent
for parity with displayName.
Persistent fields: explicit keywords + the auto-derive opt-out flag + the optional authored primary keyword. Hydrated through the accessor pairs below (Phase 1: setter; Phase 2: bracket- assign via the public-shape setter).