Concerns: pushword/core, pushword/flat
redirectFrom: internal redirects authored on the destination pagePages can now declare the old paths that should redirect to them (Jekyll redirect_from style), stored in a new redirect_from JSON column on page.
composer updatephp bin/console doctrine:schema:update --force (adds the new redirect_from column to the page table — required, the page resolver reads this column)php bin/console pw:redirect:migrate to fold existing internal redirect pages (Location: /target) into their destination page's redirectFrom and remove the now-redundant redirect pages. External / non-resolving redirects are left untouched. Use --dry-run first to preview.php bin/console cache:clearRenaming a page slug no longer creates a standalone redirect page; instead the old slug is appended to the destination page's redirectFrom. Existing redirect pages keep working unchanged. redirection.csv (flat) still holds redirects that have no destination page (external targets, non-resolving paths).