[FEATURE] Warn about tags TER already implies - #97
Open
CybotTM wants to merge 2 commits into
Open
Conversation
Every extension in TER is a TYPO3 extension, so tags such as typo3,
typo3-extension, extension, cms or php narrow nothing down there. The
same terms are valuable elsewhere -- on GitHub typo3-extension is what
makes a repository findable at all, on Packagist typo3 still helps --
which is why a publishing pipeline reusing one vocabulary across
registries ends up sending them. It shows in the listing today: the news
extension carries the tag "extension".
Warn when ter:update receives such a tag, and leave the request
untouched. Tailor is a thin client over PUT /extension/{key}; silently
dropping a value someone passed explicitly would be surprising, and
which terms are "too generic" is a judgement that belongs to the caller.
A hint at the point of use costs nothing.
Also document it in the README, next to the --tags example, together
with why it matters most for automated publishing: the whole list is
replaced on every call, so a pipeline keeps overwriting curated tags.
Resolves TYPO3#96
Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
CybotTM
marked this pull request as draft
August 2, 2026 09:07
The term list was reasoned about rather than measured. Checking 3000 TER extensions and the three vocabularies of the top 60 by downloads shows the reasoning held but the list missed spellings that dominate in practice: composer.json keywords favour "typo3 cms" with a space -- the second most common keyword overall -- and GitHub topics favour "typo3-cms-extension", the most common extension term there. Compare with separators stripped instead of enumerating permutations, so "typo3 cms", "typo3-cms" and "typo3cms" are one entry and future variants are covered. Domain tags that legitimately contain separators, such as "e-commerce" and "tt_news", are unaffected -- covered by a test. State the rule in the --tags description as well. The warning fires only after a pipeline has been written and run; the option description is what `ter:update -h` prints, which is where someone -- or a coding agent -- looks before writing it. Signed-off-by: Sebastian Mendel <github@sebastianmendel.de>
CybotTM
marked this pull request as ready for review
August 2, 2026 09:23
Contributor
Author
|
Heads-up while reviewing: I filed #98 after trying to use That does not invalidate this PR — the guidance is about which tags to choose and stays correct — but the two are worth reading together, and the README wording here may want a pointer once #98 is resolved. Happy to fold a note in if you prefer. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resolves #96, along the lines @bmack agreed to there: warning plus README update.
The rule
Every extension in TER is a TYPO3 extension, so
typo3,typo3-extension,extension,cmsandphpnarrow nothing down there. The same terms are what make a package findable on GitHub or Packagist — which is exactly why a publishing pipeline that reuses one vocabulary across registries sends them to TER.Measured, not assumed
I first wrote the term list from that reasoning alone. Checking it against 3000 TER extensions and the three vocabularies of the top 60 by downloads changed it:
Two things follow. TER tags are largely clean today — the top terms are
content,backend,responsive,news,typoscript— so this is preventive rather than a fix for a widespread mess. And the sources a pipeline would copy from are anything but clean, so the warning earns its place the moment tags are automated.The measurement also corrected the list: composer.json keywords favour
typo3 cmswith a space (the second most common keyword overall) and GitHub topics favourtypo3-cms-extension— neither was in my first draft. Rather than enumerate permutations, terms are now compared with separators stripped, so those variants and future ones collapse to one entry. Domain tags that legitimately contain separators (e-commerce,tt_news) are unaffected, and a test pins that down.Worth noting alongside: only 134 of 3000 sampled extensions use tags at all.
Warning, not filter
The request goes out unchanged. Tailor is a thin client over
PUT /extension/{key}; dropping a value someone passed explicitly would be surprising, and which terms count as too generic is a judgement for the caller.Discoverable before the run, not only after
A runtime warning arrives once a pipeline has been written and executed. The rule is therefore also in the
--tagsdescription, which is whatter:update -hprints and what someone — or a coding agent — reads while writing that pipeline:The README section gains the same reasoning and connects it to the replace semantics documented just below it — that combination is what bites automated publishing, since every release overwrites curated tags.
Implementation
Matching lives in
CommandHelper::getTagsImpliedByTer()so it is unit-tested rather than buried in the command: case-insensitive, separator-insensitive, tolerant of whitespace and empty segments, and no substring matches.composer csclean,composer tests:unitgreen — 67 tests, 183 assertions, 11 of them new.