Concerns: pushword/core
The property-hooks migration started in rc796 (Page, host, id, timestamps) now covers the entity traits, Media, SiteConfig and RequestContext. Trivial getters/setters are gone; read or assign the property of the same name. Where a setter normalized or validated, a property hook does the same on assignment, so $page->parentPage = $page still throws and $page->redirectFrom = 'old-slug' still normalizes.
In Twig nothing changes: page.parentPage, review.mediaList, pwApp.name resolve the same through property access. Only explicit method calls (page.getParentPage()) need editing — none existed in Pushword's own templates.
Removed → replacement, per class (methods with real logic all remain):
getWeight() → ->weight — setWeight() stays (tolerant parser, bool return); getCustomProperties()/setCustomProperties() → ->customProperties — keyed helpers (getCustomProperty(), …) stay; getMediaList()/setMediaList() → ->mediaList — assignment dedups, addMedia()/removeMedia() stay; getSkipAutoTimestamp()/setSkipAutoTimestamp() → ->skipAutoTimestamp. The tags API is untouched (getTags(), setTags(), getTagList(), addTag()).getTranslations()/setTranslations() → ->translations (addTranslation()/removeTranslation()/getTranslation() stay — Review::getTranslations() in pushword/conversation is a different method and is untouched); getParentPage()/setParentPage() → ->parentPage; getChildrenPages() → ->childrenPages; getVariantOf()/setVariantOf() → ->variantOf; getVariants() → ->variants; getRedirectFrom(), getRedirectFromMap(), setRedirectFrom() → ->redirectFrom (the set hook accepts every historic input shape).getSize() → ->size (setSize() stays, fluent); getFileNameHistory()/setFileNameHistory() → ->fileNameHistory; getLicenseState()/setLicenseState() → ->licenseState; getFileNameBeforeUpdate() → ->fileNameBeforeUpdate; getMainImagePages() → ->mainImagePages; ->projectDir is public (setProjectDir() stays, fluent).getLocale(), getName(), getBaseUrl(), getTemplate(), getHosts(), getFilters()/setFilters(), entityCanOverrideFilters(), isStatic(), isDefaultSite() → properties of the same name (all read-only from outside except filters). getMainHost(), getLocales(), get(), getStr() and the asset getters are unchanged.getCurrentSite(), getCurrentHost(), getCurrentRoute(), getCurrentSlug(), getCurrentPager(), getCurrentPage()/setCurrentPage() → ->currentSite, ->currentHost, ->currentRoute, ->currentSlug, ->currentPager, ->currentPage. The SiteRegistry facade (getCurrentPage(), setCurrentPage(), switchSite(), …) is unchanged.If you import flat content, note that frontmatter keys matching a public property now assign it directly (hooks included) instead of silently landing in customProperties when no setter matched.