TYPO3 Documentation Skill
Create and maintain TYPO3 extension documentation per docs.typo3.org standards.
Core Workflow
No Documentation/ yet? Run this, do not type the file out. The
namespace is the part that comes out wrong when it is written from memory
-- guides.phpdoc.org and guides.typo3.org are both addresses nobody
serves -- and a file in the wrong namespace is well-formed XML that renders
nothing:
mkdir -p Documentation && cat > Documentation/guides.xml <<'XML'
<?xml version="1.0" encoding="UTF-8"?>
<guides xmlns="https://www.phpdoc.org/guides" links-are-relative="true">
<project title="TITLE" version="MAJOR.MINOR" release="MAJOR.MINOR.PATCH"/>
</guides>
XML
grep -Fc 'xmlns="https://www.phpdoc.org/guides"' Documentation/guides.xml
Settings.cfg is the file guides.xml replaced. Nothing reads it any
more, so writing one leaves the extension with no rendered documentation
and no error to show for it.
The grep prints 1 when the namespace is right and 0 when it is not.
Then replace TITLE and both versions. <project> carries them as
attributes; an element whose text is the extension key has no title and
no release. assets/guides.xml.dist holds the full file -- extension
element, interlinks, build configuration -- and is the better starting
point wherever the skill directory is reachable.
Run extraction first to find gaps:
scripts/extract-all.sh /path/to/extension
scripts/analyze-docs.sh /path/to/extension
Consult the matching reference
Use TYPO3 directives, not plain text
Validate: scripts/validate_docs.sh /path/to/extension
Render: scripts/render_docs.sh /path/to/extension
Critical: For "show docs", render HTML, not raw RST.
Element Selection Guide
| Content Type |
Directive |
| Complete code |
literalinclude (preferred) |
| Short snippets |
code-block with :caption: |
| Config options |
confval with :type:, :default: |
| PHP API |
php:method:: -- :returntype: for nullable/union |
| Notices |
note, tip, warning, important |
| Feature grids |
card-grid with footer stretched-link |
| Alternatives |
tabs (synchronized) |
| Screenshots |
figure with :zoom: lightbox + border/shadow classes |
Critical Rules
Official docs are canonical; on conflict the live manual wins -- report
drift (references/canonical-sources.md).
Upstream:
- UTF-8, 4-space indent (no tabs), LF; wrap at 80 chars where possible
- CamelCase files, sentence case headings
- Permalink anchors (
.. _label:) before every heading
- Index.rst in every subdirectory
- PNG/AVIF images with
:alt:
- PHP domain: no
?Type/Type|null in php:method::; use :returntype:
NR policy: no mailto: (upstream allows it; spam/PII -- use
Issues/Discussions); .editorconfig in Documentation/.
Heuristic: ~250 lines per RST, split with toctree; screenshots where
they help (backend modules, config, workflows).
Code Example Validation
Cross-reference examples against source: grep method names in
Classes/, compare CLI arguments with configure().
See references/extraction-patterns.md.
Pre-Commit Checklist
- Code blocks have
:caption:, inline code uses proper roles
- Screenshots exist with
:alt: and :zoom: lightbox
scripts/validate_docs.sh passes, render has no warnings
- README and Documentation/ synchronized
References
references/canonical-sources.md -- topic-to-upstream map, provenance labels
references/file-structure.md -- layout, naming
references/guides-xml.md -- the guides.xml skeleton, build config, interlinks
references/coding-guidelines.md -- CGL deltas, .editorconfig
references/rst-syntax.md -- headings, punctuation pitfalls
references/text-roles-inline-code.md -- :php:, :guilabel:, :ref:
references/code-structure-elements.md -- code blocks, confval, PHP domain
references/typo3-directives.md -- confval, versionadded, deprecated
references/content-directives.md -- accordion, tabs, card-grid
references/screenshots.md -- figures, image rules, SVG diagrams
references/rendering.md -- Docker commands, live preview
references/intercept-deployment.md -- webhook, build triggers
references/asset-templates-guide.md -- templates, screenshot workflow
references/architecture-decision-records.md -- ADR patterns
references/documentation-coverage-analysis.md -- coverage scoring
references/scripts-guide.md -- script options
references/typo3-extension-architecture.md -- extension layout
references/upstream-docs-contribution.md -- upstream docs PRs
references/render-guides-development.md -- changing the renderer itself: directive options, interlink parsing, integration-fixture semantics
1---2name: typo3-docs3description: Use when TYPO3 extension documentation has to render on docs.typo3.org, which builds a manual from Documentation/guides.xml and reads no Settings.cfg (a single README.rst serves an extension too small for one): when an extension has no documentation yet, or when creating, editing or reviewing Documentation/*.rst, guides.xml, README.md or XLF translations, rendering docs with Docker, TYPO3 RST directives, screenshots, or XLIFF 2-space indentation (TYPO3 v14+).4license: (MIT AND CC-BY-SA-4.0). See LICENSE-MIT and LICENSE-CC-BY-SA-4.05---67# TYPO3 Documentation Skill89Create and maintain TYPO3 extension documentation per docs.typo3.org standards.1011## Core Workflow12130. **No `Documentation/` yet?** Run this, do not type the file out. The14 namespace is the part that comes out wrong when it is written from memory15 -- `guides.phpdoc.org` and `guides.typo3.org` are both addresses nobody16 serves -- and a file in the wrong namespace is well-formed XML that renders17 nothing:1819 ```bash20 mkdir -p Documentation && cat > Documentation/guides.xml <<'XML'21 <?xml version="1.0" encoding="UTF-8"?>22 <guides xmlns="https://www.phpdoc.org/guides" links-are-relative="true">23 <project title="TITLE" version="MAJOR.MINOR" release="MAJOR.MINOR.PATCH"/>24 </guides>25 XML26 grep -Fc 'xmlns="https://www.phpdoc.org/guides"' Documentation/guides.xml27 ```2829 `Settings.cfg` is the file `guides.xml` replaced. Nothing reads it any30 more, so writing one leaves the extension with no rendered documentation31 and no error to show for it.3233 The `grep` prints `1` when the namespace is right and `0` when it is not.34 Then replace TITLE and both versions. `<project>` carries them **as35 attributes**; an element whose text is the extension key has no title and36 no release. `assets/guides.xml.dist` holds the full file -- extension37 element, interlinks, build configuration -- and is the better starting38 point wherever the skill directory is reachable.391. **Run extraction first** to find gaps:40 ```bash41 scripts/extract-all.sh /path/to/extension42 scripts/analyze-docs.sh /path/to/extension43 ```442. Consult the matching reference453. Use TYPO3 directives, not plain text464. Validate: `scripts/validate_docs.sh /path/to/extension`475. Render: `scripts/render_docs.sh /path/to/extension`4849> **Critical**: For "show docs", render HTML, not raw RST.5051## Element Selection Guide5253| Content Type | Directive |54|--------------|-----------|55| Complete code | `literalinclude` (preferred) |56| Short snippets | `code-block` with `:caption:` |57| Config options | `confval` with `:type:`, `:default:` |58| PHP API | `php:method::` -- `:returntype:` for nullable/union |59| Notices | `note`, `tip`, `warning`, `important` |60| Feature grids | `card-grid` with footer `stretched-link` |61| Alternatives | `tabs` (synchronized) |62| Screenshots | `figure` with `:zoom: lightbox` + border/shadow classes |6364## Critical Rules6566Official docs are canonical; on conflict the live manual wins -- report67drift (`references/canonical-sources.md`).6869Upstream:7071- **UTF-8**, **4-space** indent (no tabs), **LF**; wrap at **80 chars** where possible72- **CamelCase** files, **sentence case** headings73- **Permalink anchors** (`.. _label:`) before every heading74- **Index.rst** in every subdirectory75- **PNG/AVIF** images with `:alt:`76- **PHP domain**: no `?Type`/`Type|null` in `php:method::`; use `:returntype:`7778NR policy: **no `mailto:`** (upstream allows it; spam/PII -- use79Issues/Discussions); **.editorconfig** in `Documentation/`.8081Heuristic: **~250 lines** per RST, split with `toctree`; screenshots where82they help (backend modules, config, workflows).8384## Code Example Validation8586Cross-reference examples against source: grep method names in87`Classes/`, compare CLI arguments with `configure()`.88See `references/extraction-patterns.md`.8990## Pre-Commit Checklist91921. Code blocks have `:caption:`, inline code uses proper roles932. Screenshots exist with `:alt:` and `:zoom: lightbox`943. `scripts/validate_docs.sh` passes, render has no warnings954. README and Documentation/ synchronized9697## References9899- `references/canonical-sources.md` -- topic-to-upstream map, provenance labels100- `references/file-structure.md` -- layout, naming101- `references/guides-xml.md` -- the guides.xml skeleton, build config, interlinks102- `references/coding-guidelines.md` -- CGL deltas, .editorconfig103- `references/rst-syntax.md` -- headings, punctuation pitfalls104- `references/text-roles-inline-code.md` -- `:php:`, `:guilabel:`, `:ref:`105- `references/code-structure-elements.md` -- code blocks, confval, PHP domain106- `references/typo3-directives.md` -- confval, versionadded, deprecated107- `references/content-directives.md` -- accordion, tabs, card-grid108- `references/screenshots.md` -- figures, image rules, SVG diagrams109- `references/rendering.md` -- Docker commands, live preview110- `references/intercept-deployment.md` -- webhook, build triggers111- `references/asset-templates-guide.md` -- templates, screenshot workflow112- `references/architecture-decision-records.md` -- ADR patterns113- `references/documentation-coverage-analysis.md` -- coverage scoring114- `references/scripts-guide.md` -- script options115- `references/typo3-extension-architecture.md` -- extension layout116- `references/upstream-docs-contribution.md` -- upstream docs PRs117- `references/render-guides-development.md` -- changing the renderer itself: directive options, interlink parsing, integration-fixture semantics