Cache-Lebensdauer: den Ein-Jahres-Default in beide Skills aufnehmen

Design-Paritaet 1.4 -> 1.5: neuer Warnpunkt in der Vergleichsschleife.
Bevor man eine Rueckmeldung "immer noch nicht behoben" fuer bare Muenze
nimmt, gehoeren die Response-Header geprueft. Ohne config.cache_period
liefert TYPO3 seinen Core-Default von einem Jahr als max-age aus, und
config.sendCacheHeaders = 1 (von t3bootstrap gesetzt) reicht ihn an
Browser und Proxys weiter. Eine erteilte Frist ist nicht widerrufbar,
ein serverseitiges cache:flush erreicht solche Clients also nie. Da
Erweiterungen ihre Konfiguration teils als Inline-JS in die Seite
schreiben, reproduziert eine alte Kopie laengst behobene Fehler exakt.

Cutover 1.0 -> 1.1: derselbe Punkt als Go-live-Pruefung in Phase 2.
Dort wiegt er schwerer, weil nach dem Livegang jeder Besucher mit einer
bereits erteilten Jahresfrist festhaengt.

Beides stammt aus einem realen Fall: Rueckmeldungen aus dem Kundennetz
meldeten Fehler weiter, die im Agenturnetz nachweislich behoben waren.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-07 12:57:59 +02:00
co-authored by Claude Opus 5
parent 871a3ffd19
commit d9ce4cbfba
2 changed files with 26 additions and 2 deletions
+15 -1
View File
@@ -3,7 +3,7 @@ name: typo3-t3bootstrap-live-design-parity
description: "Match a TYPO3 v14 t3bootstrap-based build (local DDEV) to a reference LIVE site page by page — the frontend/design phase after a v11->v14 upgrade. Use when making an upgraded TYPO3 site look like its old/live counterpart, when doing per-page visual parity against a reference URL, when content that exists in the DB isn't rendering after a v11->v14 migration, or when customizing a t3bootstrap sitepackage's templates/SCSS/settings. Covers: the Playwright compare loop (computed style + CSS rule), the settings-vs-SCSS decision, the t3b_core spacing system (spacing.yaml / tx_t3b_spacing) and why spacing must never be fixed in SCSS, recurring structural fixes (stranded colPos, missing templateLayout partials, template partialRootPaths precedence/shadowing, on-demand component CSS, unregistered CTypes), a full visual-parity checklist (layout/width, typography, colors, links/buttons, equal-sizing, icons, borders, footer, header/nav, hero carousel incl. why Bootstrap autoplay cannot be switched off via the interval), diagnosing regressions caused by an editor's SAVE (CKEditor dropping undeclared classes, FlexForm selects with no empty item flipping to "yes"), and cache-safe techniques (full-bleed bands, image-border restyle, responsive crop variants, client-side randomisation, FAL-via-DataHandler). Assumes the site already boots on v14 (see the v11->v14 upgrade skill)."
metadata:
author: Wappler
version: "1.4"
version: "1.5"
---
# TYPO3 v14 t3bootstrap — live-design parity
@@ -48,6 +48,20 @@ placeholders below from the site you're matching; keep a per-project log of what
path already returned the new one. Symptom: your fix "doesn't work" in the browser but is provably
live on the server. Cross-check with an in-page `fetch(location.pathname + '?x=' + Math.random(),
{cache:'no-store'})` and compare against the DOM before concluding anything about the fix.
- **⚠⚠ CHECK THE RESPONSE HEADERS BEFORE BELIEVING ANY "still not fixed" REPORT.**
`curl -sI <url> | grep -iE 'cache-control|expires'`. With `config.sendCacheHeaders = 1` (t3bootstrap
sets it) and **no `config.cache_period`**, TYPO3 emits its core default lifetime — `CacheLifetime
Calculator::defaultCacheTimeout = 365 * 86400`, i.e. **`max-age` of ONE YEAR** — to browsers and,
since the response carries no `private`, to shared proxies. A `max-age` already handed out
**cannot be revoked**: `cache:flush` clears the SERVER cache only, that client simply stops asking.
Deploys and editorial changes then never reach returning visitors, and anything rendered INTO the
document comes back stale with it — including inline JS config (e.g. `ws_slider` writes its whole
configuration as `let options_slider_<uid> = {...}` in the page), so a long-fixed bug reproduces
perfectly. Tell-tale: people on YOUR network see every fix, people on the CUSTOMER's network see
none. Fix at the source — `config.cache_period = 3600` (caps the server cache AND the emitted
max-age), or `sendCacheHeaders = 0` to stop instructing the client at all. Note the lifetimes
already issued cannot be recalled: those users need one hard reload. Assets are fine either way
(TYPO3 appends `?<mtime>` to CSS/JS URLs).
2. With `browser_evaluate`, capture the real element's **computed style AND its explicit CSS rule**
(getComputedStyle + walk `document.styleSheets` for the selector). Don't assume inheritance.
3. Diff vs DDEV → decide **setting vs SCSS** (below) → apply → flush → re-screenshot → verify.