Skip to content

Commit 152071f

Browse files
committed
feat: add TER metadata and public listing conformance checks
- Add TC-55/56/57: mechanical checks for composer.json support URLs - Add TC-80: LLM review for TER, Packagist, docs.typo3.org listings - Add TC-81: LLM review for TER publish workflow metadata setup - Add ter-publishing.md: TER metadata setup, Packagist, docs.typo3.org - Update conformance checklist with TER metadata and public listings
1 parent bdf7c55 commit 152071f

File tree

3 files changed

+199
-1
lines changed

3 files changed

+199
-1
lines changed

.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "typo3-conformance",
3-
"version": "2.2.1",
3+
"version": "2.4.0",
44
"description": "Evaluate TYPO3 extensions for conformance to v12/v13/v14 standards",
55
"repository": "https://github.com/netresearch/typo3-conformance-skill",
66
"license": "MIT",

skills/typo3-conformance/checkpoints.yaml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,28 @@ mechanical:
231231
severity: info
232232
desc: "ext_tables.php should exist for backend module registration (if needed)"
233233

234+
# === TER PUBLISHING CHECKS ===
235+
- id: TC-55
236+
type: json_path
237+
target: composer.json
238+
pattern: '.support.issues'
239+
severity: warning
240+
desc: "composer.json should define support.issues URL for bug tracker link"
241+
242+
- id: TC-56
243+
type: json_path
244+
target: composer.json
245+
pattern: '.support.source'
246+
severity: warning
247+
desc: "composer.json should define support.source URL for repository link"
248+
249+
- id: TC-57
250+
type: json_path
251+
target: composer.json
252+
pattern: '.homepage'
253+
severity: warning
254+
desc: "composer.json should define homepage URL"
255+
234256
llm_reviews:
235257
# === CODE QUALITY REVIEWS ===
236258
- id: TC-60
@@ -281,3 +303,62 @@ llm_reviews:
281303
5. Verify version compatibility is clearly stated
282304
severity: info
283305
desc: "Extension documentation should be complete"
306+
307+
# === PUBLIC LISTING VERIFICATION ===
308+
- id: TC-80
309+
domain: publishing
310+
prompt: |
311+
Verify public listing presence and completeness for the extension.
312+
Extract the composer package name from composer.json and the extension
313+
key from ext_emconf.php, then check:
314+
315+
1. TER Listing (extensions.typo3.org/extension/{extension_key}):
316+
- Extension page exists and is accessible
317+
- Sidebar links are populated (Extension Manual, Found an Issue,
318+
Code Insights, Packagist.org)
319+
- If links are missing, they must be set via:
320+
TYPO3_API_TOKEN=... tailor ter:update \
321+
--composer="vendor/package-name" \
322+
--manual="https://github.com/..." \
323+
--issues="https://github.com/.../issues" \
324+
--repository="https://github.com/..." \
325+
{extension_key}
326+
- Version shown matches latest release
327+
328+
2. Packagist Listing (packagist.org/packages/{vendor/name}):
329+
- Package exists and is findable
330+
- Description is meaningful (not empty)
331+
- License is set
332+
- Latest version is published
333+
334+
3. Documentation (docs.typo3.org):
335+
- If Documentation/ directory with guides.xml exists, check if
336+
rendered documentation is available at docs.typo3.org
337+
- Alternatively, README or external docs linked from TER
338+
339+
Report missing or incomplete listings as actionable items.
340+
severity: warning
341+
desc: "Extension should have complete TER, Packagist, and documentation listings"
342+
343+
- id: TC-81
344+
domain: publishing
345+
prompt: |
346+
Check the TER publishing workflow for metadata setup completeness:
347+
348+
1. Verify .github/workflows/ contains a TER publish workflow
349+
2. Check if the workflow includes a tailor ter:update step that sets:
350+
- --composer (package name for Packagist link)
351+
- --manual (documentation/repository link)
352+
- --issues (issue tracker link)
353+
- --repository (source code link)
354+
3. If ter:update is missing from the workflow, recommend adding it
355+
as a post-publish step or as a separate one-time setup step
356+
357+
The ter:update command sets the sidebar links on extensions.typo3.org.
358+
Without it, the TER page shows no links to documentation, issues,
359+
source code, or Packagist - making the extension appear incomplete.
360+
361+
This is a MANDATORY step for initial TER setup. The links persist
362+
across releases, so it only needs to run once (or when URLs change).
363+
severity: warning
364+
desc: "TER publish workflow should include metadata setup via tailor ter:update"

skills/typo3-conformance/references/ter-publishing.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,108 @@ Details: ${RELEASE_URL}"
230230

231231
---
232232

233+
## MANDATORY: TER Metadata Setup (Sidebar Links)
234+
235+
**CRITICAL:** The TER extension page sidebar links (Extension Manual, Found an Issue?, Code Insights, Packagist.org) are **NOT** populated from `composer.json`. They must be set explicitly via `tailor ter:update`.
236+
237+
Without this step, the TER page looks incomplete — no links to documentation, issues, source code, or Packagist.
238+
239+
### The Problem
240+
241+
New extensions uploaded to TER show an empty sidebar with no links:
242+
- No "Extension Manual" button
243+
- No "Found an Issue?" button
244+
- No "Code Insights" button
245+
- No "Packagist.org" button
246+
247+
This makes the extension appear unprofessional and hard to use.
248+
249+
### The Solution
250+
251+
Run `tailor ter:update` after the first TER upload:
252+
253+
```bash
254+
TYPO3_API_TOKEN=your-token tailor ter:update \
255+
--composer="vendor/package-name" \
256+
--manual="https://github.com/vendor/repo" \
257+
--issues="https://github.com/vendor/repo/issues" \
258+
--repository="https://github.com/vendor/repo" \
259+
--tags="tag1,tag2,tag3" \
260+
extension_key
261+
```
262+
263+
### Available Metadata Fields
264+
265+
| Option | TER Sidebar Button | Required |
266+
|--------|--------------------|----------|
267+
| `--manual` | Extension Manual | **YES** |
268+
| `--issues` | Found an Issue? | **YES** |
269+
| `--repository` | Code Insights | **YES** |
270+
| `--composer` | Packagist.org (auto-linked) | **YES** |
271+
| `--tags` | Search tags | Recommended |
272+
| `--paypal` | Sponsoring link | Optional |
273+
274+
### When to Run
275+
276+
- **First release:** MANDATORY after the first `ter:publish`
277+
- **URL changes:** Only when repository, docs, or issue tracker URLs change
278+
- **Links persist:** Once set, they carry across all future version uploads
279+
280+
### Automation via CI
281+
282+
Add to your TER publish workflow as a post-publish step:
283+
284+
```yaml
285+
- name: Update TER metadata
286+
if: env.FIRST_RELEASE == 'true' # or always, idempotent
287+
run: |
288+
TAILOR="$(composer global config bin-dir --absolute)/tailor"
289+
"${TAILOR}" ter:update \
290+
--composer="${COMPOSER_NAME}" \
291+
--manual="${REPO_URL}" \
292+
--issues="${REPO_URL}/issues" \
293+
--repository="${REPO_URL}" \
294+
"${TYPO3_EXTENSION_KEY}"
295+
```
296+
297+
### Verification
298+
299+
After setting metadata, verify on the TER page:
300+
301+
```bash
302+
# Check that all 4 sidebar links are present
303+
curl -s "https://extensions.typo3.org/extension/${EXT_KEY}" | \
304+
grep -c 'Extension Manual\|Found an Issue\|Code Insights\|Packagist\.org'
305+
# Expected: 4
306+
```
307+
308+
---
309+
310+
## Packagist Listing
311+
312+
Extensions with a `composer.json` should be listed on [Packagist](https://packagist.org):
313+
314+
1. **Submit package** at https://packagist.org/packages/submit
315+
2. **Enable auto-update** via GitHub webhook (Packagist Settings > Enable GitHub Hook)
316+
3. **Verify** the package appears with correct description and version
317+
318+
The `--composer` flag in `ter:update` creates the Packagist link on the TER page.
319+
320+
---
321+
322+
## Documentation Rendering on docs.typo3.org
323+
324+
Extensions with a `Documentation/` directory and `guides.xml` can have their documentation rendered at docs.typo3.org:
325+
326+
1. **Create** `Documentation/guides.xml` with project metadata
327+
2. **Add RST files** following TYPO3 documentation standards
328+
3. **Webhook** is automatically triggered when the extension is on Packagist
329+
4. **Verify** at `https://docs.typo3.org/p/vendor/package-name/main/en-us/`
330+
331+
If not using docs.typo3.org, set `--manual` to the GitHub repository URL or a hosted documentation site.
332+
333+
---
334+
233335
## Release Comment Best Practices
234336

235337
### Writing Effective Release Notes
@@ -369,6 +471,21 @@ GitHub Actions Workflow:
369471
[ ] Uses typo3/tailor for publishing
370472
[ ] Secrets properly configured
371473
474+
TER Metadata (MANDATORY for initial setup):
475+
[ ] tailor ter:update --manual has been run (Extension Manual link)
476+
[ ] tailor ter:update --issues has been run (Found an Issue link)
477+
[ ] tailor ter:update --repository has been run (Code Insights link)
478+
[ ] tailor ter:update --composer has been run (Packagist.org link)
479+
[ ] All 4 sidebar links visible on extensions.typo3.org
480+
481+
Public Listings:
482+
[ ] Extension page exists on extensions.typo3.org
483+
[ ] Package exists on packagist.org
484+
[ ] Documentation available (docs.typo3.org or linked from TER)
485+
[ ] composer.json has support.issues URL
486+
[ ] composer.json has support.source URL
487+
[ ] composer.json has homepage URL
488+
372489
Release Process:
373490
[ ] Semantic versioning followed
374491
[ ] CHANGELOG.md updated before release

0 commit comments

Comments
 (0)