Apply Changelog entries to the docs
Whenever a change to the TYPO3 Core potentially affects the users a changelog entry is created or edited, for example:
Deprecated since version 12.3 Deprecation: #100307 - Various hooks related to authentication users
The hook
$GLOBALS
is deprecated since TYPO3 12.3, use the event
Before instead.
See also
See What belongs in a version directive for what belongs in the directive body versus the regular text around it.
Each Core change affecting the changelog automatically creates an Issue in the repository Changelog-To-Doc. New issues here should be treated with priority.
Table of contents
Triage new issues
A new issue in Changelog-To-Doc only has a version label, such as 15.0 or 14.3.x. Triage decides whether the change needs documentation and where. Each issue ends in one of three ways:
- No docs needed: label No docs needed, comment why, and close the issue.
- Needs documenting: label the manual and the type of change, and comment which pages need to change and how. The issue stays open.
- Already documented: comment where, and close the issue without the label No docs needed.
Read the change
The issue holds the commit message and the changelog entry. Read the diff of the Core commit as well. A commit message can name an option differently from the code, and the comment must use the name from the code. Search the Core source of every affected version for each class, option, and default value that you name.
If the commit also changed the manual of a system extension, under
typo3/, the change is already
documented.
Search the manuals
Search all manuals for the classes, methods, options, and labels that the change affects, not only the manual that seems to fit. Check the TSconfig Reference, the Exceptions Reference, the tutorials, and the manuals of the system extensions as well.
The change doesn't need documenting if:
- It only fixes or adds to the changelog itself.
- No manual mentions what changed, and the changelog entry is enough to migrate. An internal method or a change to the database layout of a single extension is often such a case.
- The manuals already describe the new behavior correctly.
- It only changes the user interface of the backend and adds no option.
This applies even if the setting for that part of the backend has its
own configuration value. A
versionaddedon such an option says nothing that helps the reader.
If you are not sure, label the manual and say so in the comment. Ask in the #typo3-documentation channel on Slack.
Labels
Add one label per manual that has to change, for example TYPO3 Explained, TCA reference, TSconfig Reference, or Editors Tutorial. Add one label for the type of change: Feature, Breaking, Deprecation, or Important. Topic labels such as PSR-14 Event or Extbase help to find related issues.
The manuals of the system extensions, such as the manuals of EXT:scheduler, EXT:redirects, or EXT:reactions, are part of the Core. Changes to them go through Gerrit, not through GitHub. Label them with EXT:<extension> where that label exists, and with Gerrit.
The comment
Write a comment for the person who documents the change. That person may not know the change yet.
- Start with the outcome: "No docs needed:" with the reason, or "Needs documenting in <manual>".
- Name the page and the section, and what to add, change, or remove.
Name the directive to add, such as a
versionaddedfor 15.0, or a confval that moves to404.with the fieldrst :removed:. - Put a permalink to each page on its own line, as
https://, see Permalinks. Open every permalink before you post it. The anchor must be the one that docs.typo3.org publishes, with hyphens instead of underscores.docs. typo3. org/ permalink/ {interlink}: {anchor} - Link related issues with their full URL.
- Name outdated text in other manuals in a paragraph of its own, also if the change does not need documentation otherwise.
The comment follows the same writing rules as the documentation, see the rules for sentences.
Post the comment before you close the issue. Closing it first and then commenting leaves a closed issue without a reason if the second step fails.
Commit messages
All changes that are related to such an issue should contain a reference in their commit message to the issue (see commit message conventions for the full picture), for example:
One pull request per issue
Document each Changelog-To-Doc issue in its own pull request, with a title matching the issue's own title. Do not bundle documentation for several issues into a single pull request, even if they touch the same page.
This also makes reverts easier: if a feature gets reverted before release (see Which TYPO3 versions were affected?), a self-contained pull request can be reverted cleanly, without pulling in unrelated documentation changes along with it.
Which TYPO3 versions were affected?
Before writing the documentation, find out which TYPO3 version(s) the change actually shipped in - this decides which docs branch(es) to work on and which Releases: trailer and backport labels to use.
The source of truth is the changelog entry's own path in typo3/typo3, under
Documentation/. That version is the earliest
one the change shipped in - it then also applies to every later release,
forward from that point on. For example:
14.was introduced after the initial 14.3 LTS release, so it first appears in a later 14.3 patch release (14.3.22) and is also part of 15.0.3. x/ Important- 110591- Custom Columns In The Workspaces Module. rst 14.was part of 14.2.0, and therefore also of 14.3.0 and 15.0.2/ Feature- 108975- Add Configuration Provider For Extbase Class Configuration. rst 13.was part of 13.3.0, 13.4.0, and every 14.x and 15.x release since.3/ Feature- 104878- Introduce Dashboard Widget For Pages With Latest Changes. rst
The version label(s) already on the Changelog-To-Doc issue itself (for example 14.2) are a convenient shortcut - the issue is automatically labeled from that same path - but not the source of truth themselves.
Do not rely only on the Releases: trailer of the Core commit the issue
links to. While a change is being developed, the version it targets is
often simply main - a dedicated branch for that version does not exist
yet. The trailer, written at commit time, reflects that and may only say
main, even though main later becomes that specific version, and
further versions branch off from that same point afterwards.
If you are documenting a feature that has not shipped yet - for example a feature planned for 15.0 before 15.0's first release - use that future version anyway, as decided on the roadmap. Documentation should be ready by the time a release ships, not written only afterwards.
If such a feature is reverted before release, the changelog file gets deleted and a new Changelog-To-Doc issue is opened for the revert - use that to roll back the corresponding documentation change.
You can also follow the issue's link to the change in Gerrit (for example https://review.typo3.org/c/Packages/TYPO3.CMS/+/85987), open the ⋮ menu in the upper right corner and select Included In - it lists every version the change was ever included in.
Deprecations in the Changelog
All information about deprecations should be marked with the
.. deprecated::
directive and the version of deprecation.
Deprecated since version 12.3 Deprecation: #100307 - Various hooks related to authentication users
The hook
$GLOBALS
is deprecated since TYPO3 12.3, use the event
Before instead.
.. deprecated:: 12.3
:changelog: deprecation-100307-1679924603
The hook :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_userauth.php']['logoff_pre_processing']`
is deprecated since TYPO3 12.3, use the event
:php-short:`\TYPO3\CMS\Core\Authentication\Event\BeforeUserLogoutEvent` instead.
In the ideal workflow a deprecation option will be removed with a breaking change in the next major version. We can then remove the deprecated section.
Using the correct directive will help the Documentation Team to find and remove deprecation hints in later versions.
Breaking changes in the Changelog
Ideally a breaking change was prepared by a deprecation in the previous version. In this case we can remove the deprecated section.
When important concepts changed that might confuse the users we sometimes leave
a
.. versionchanged::
directive to inform users where to head now.
Changed in version 12.0 Deprecation: #96972 - Deprecate QueryBuilder::execute()
The widely used
->execute method has been split into
->execute and
->execute.
.. versionchanged:: 12.0
:changelog: deprecation-96972
The widely used :php:`->execute()` method has been split into
:php:`->executeQuery()` and :php:`->executeStatement()`.
For emphasis you can also put the version changed directive into a warning or info box:
Warning
Changed in version 12.0 Deprecation: #96972 - Deprecate QueryBuilder::execute()
The widely used
->execute method has been split into
->execute and
->execute.
.. warning::
.. versionchanged:: 12.0
:changelog: deprecation-96972
The widely used :php:`->execute()` method has been split into
:php:`->executeQuery()` and :php:`->executeStatement()`.
Using the correct directive will help us to track down and remove these hints in later versions.
New features in the Changelog
When adding a new feature to the docs that is not yet available in all supported
TYPO3 versions, it can be helpful to mark it with the
.. versionadded::
directive:
New in version 13.0 Feature: #101544 - Introduce PHP attribute to autoconfigure event listeners
A PHP attribute
\TYPO3\ is
available to autoconfigure a class as an event listener.
This directive not only highlights new features but also assists users who are reading the manual in a version that does not align with their installation, ensuring clarity in cases where feature compatibility may differ.
The Documentation Team removes these directives when the feature is present in all supported TYPO3 versions.