Skip to content

[TASK] Drop v13 and allow v15@dev - #1669

Merged
benjaminkott merged 13 commits into
masterfrom
task/drop-v13-allow-v15
Sep 14, 2026
Merged

benjaminkott merged 13 commits into
masterfrom
task/drop-v13-allow-v15

Conversation

@benjaminkott

Copy link
Copy Markdown
Owner

Description

Master becomes 17.0 and follows TYPO3 main: the package declares
^14.3 || 15.*.*@dev and drops 13.4, the way the previous major
crossing dropped 12.4. Everything the branch removes or changes comes
from what TYPO3 15 removed (Breaking-109783 and its siblings) and from
the deprecation log of the installation on both majors, which is empty
afterwards.

One commit per concern:

  • Drop v13 and allow v15@dev — constraints, ext_emconf.php,
    CI matrix (15 runs on PHP 8.5 only), README, docs. b13/container
    leaves require-dev: it has no release for 15, so a composer update against main could not resolve. The ^14.3 CI cells add it
    and PHPStan checks the container registration there.
    composer typo3:dev resolves the dependencies against the
    development major without touching composer.json; the CI uses the
    same --with.
  • Drop the TYPO3 v13 fallbacks — the < 14 branches in
    ext_localconf.php, the test skips, the routing note, the 13
    PHPStan baseline.
  • Upgrade wizards on the EXT:core interfaces — the EXT:install
    ones are gone in 15.
  • FlexForms through columnsOverrides — addPiFlexFormValue() is
    gone in 15.
  • csp instead of useNonce on f:asset.css.
  • FlexFormTools instead of FlexFormService — the alias is gone.
  • [BUGFIX] Image dimensions from the processed files — 15 stops
    reporting media to the AssetCollector, <img width="" height="">
    was the result. A listener on AfterFileProcessingEvent collects
    them on every declared major; the ViewHelper keeps its API.
  • ds instead of ds.default — the TCA migration 14 logs.
  • PHPStan without b13/container — path-scoped ignore.
  • [BUGFIX] Page layout column identifiers — 15 throws for a
    column without one, 14 derived a hash and logged; every page of
    the site answered 500. 108 columns, identifier = label suffix.
  • Sass values for scssphp — raw variables, url() without an
    argument declaration and with a PHP return value are deprecated in
    scssphp 1.x and gone in 2.0.
  • Package resources through the package manager — the page
    renderer hands PKG: identifiers to the compile hook, and
    getFileAbsFileName() deprecates resolving those.
  • Core labels by their current domains — 17 labels the TCA
    borrowed from locallang_ttc.xlf are gone in 15; every palette
    heading in the forms was empty. core.form.palettes and
    frontend.db.tt_content carry the same strings on both majors.

Type of change

  • Bugfix
  • Task
  • Feature
  • Documentation

Related issues

Needs bk2k/extension-helper 2.3 (released) for Symfony Console 8.
b13/container has no release for TYPO3 15; the CI leaves it out of
that cell until it has.

How to validate

Both majors were run as Branchery worktrees with a copy of the
development database — TYPO3 dev-main ccdcf13 on PHP 8.5.9, and
14.3.7 with b13/container 3.2.3:

  1. composer test:php:lint, composer cgl:ci, composer phpstan,
    composer test:php:unit (96), composer test:php:functional (74)
    — green in both.
  2. All 45 pages of the site answer 200 with their images.
  3. Backend: page module on 9 pages covering all 13 layouts, edit forms
    of 9 element types with their FlexForm fields and palette headings.
  4. var/log/typo3_deprecations_*.log is empty after 2 and 3, on 14.3
    and on 15.
  5. composer typo3:dev on a checkout resolves to dev-main.

Left as is: 10 PHP 8.5 deprecations of scssphp's own signatures and 18
PHPUnit 13 notices about mocks in the unit suite (pre-existing), and
the Extension Scanner was not run — the identifier sweep over
Breaking-109783 stands in.

AI assistance

  • Agent and version: Claude Code, VS Code extension
  • Model and effort/reasoning level: Claude Opus 5 (1M context), default
    effort
  • Share written by the agent: the whole change and this description
  • Reviewed and understood before pushing: the frontend and backend of
    the v15 worktree were checked by hand; code review pending

Checklist

  • Targets master
  • Commits are signed off (git commit -s)
  • Commit subjects follow [BUGFIX|TASK|FEATURE] Subject
  • composer cgl leaves the code unchanged
  • composer phpstan passes
  • composer test passes
  • A bugfix comes with a test that fails without it — both
    bugfixes (GalleryTest, BackendLayoutsTest)
  • Holds on every TYPO3 and PHP version declared in composer.json
    — 14.3 and 15 locally on PHP 8.5, the rest is the CI matrix
  • Assets rebuilt — no SCSS, JavaScript or icons changed
  • Documentation updated — installation requirements, contribution
    guide, routing note

Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
TYPO3 v15 stops reporting processed images to the AssetCollector, so the
width and height the media rendering asks for came back empty. The files
processed during the request are collected through
AfterFileProcessingEvent instead, which every declared major fires.

Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
The frontend resolves the content areas of a page from its layout, and
TYPO3 v15 refuses a column that has a colPos but no identifier where
v14 derived one and logged a deprecation. The identifier is the name
the column already carries in its label.

Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
scssphp deprecates raw PHP values for custom variables, a custom
function without an argument declaration and a PHP return value from
it, and drops all three in scssphp 2.0. The variables are parsed as
Sass source the way the compiler read them itself, and url() returns
the keyword it used to return as a string.

Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
The page renderer hands the stylesheets to the hook as PKG: resource
identifiers, and getFileAbsFileName() deprecates resolving a file
system path from one. The compiler needs that path to follow the
imports of a stylesheet, so the package manager answers for a package
resource.

Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
The palette and field labels the TCA borrowed from locallang_ttc.xlf
and locallang_general.xlf are unused in the core since TYPO3 v14 and
gone in v15, where every form of the package lost its palette headings.
The same strings live in the core.form.palettes and frontend.db.tt_content
domains on both declared majors. Database.xlf had already been gone
since v14, and the type of a carousel item is labelled by the package.

Signed-off-by: Benjamin Kott <benjamin.kott@outlook.com>
@benjaminkott
benjaminkott merged commit 38c8d2f into master Sep 14, 2026
7 checks passed
@benjaminkott
benjaminkott deleted the task/drop-v13-allow-v15 branch September 14, 2026 15:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant