Upgrade to 1.0.0-rc799

Concerns: pushword/core

Entity and site state are native properties now (PHP 8.4)

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):

  • Page, Message, Contact, Snippet, Media, User (shared traits): getWeight()->weightsetWeight() 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()).
  • Page: 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).
  • Media: getSize()->size (setSize() stays, fluent); getFileNameHistory()/setFileNameHistory()->fileNameHistory; getLicenseState()/setLicenseState()->licenseState; getFileNameBeforeUpdate()->fileNameBeforeUpdate; getMainImagePages()->mainImagePages; ->projectDir is public (setProjectDir() stays, fluent).
  • SiteConfig: 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.
  • RequestContext: 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.