Upgrade-Skill 1.3 - neuer Step 9b: die uebrig gebliebenen sys_template-
Datensaetze loeschen. "Via site sets, not sys_template" liest sich wie "die
Tabelle ist erledigt", aber v14 wertet sie weiter aus (TCA in cms-frontend,
PageInformationFactory ruft getSysTemplateRowsByRootline). Ein Alt-Template
mit clear=3 OBERHALB des Site-Roots loescht Constants und Setup, also auch
das Set-TypoScript - und zwar nur fuer Code, der das FE-TypoScript im
Backend mit eigener Rootline neu aufbaut, weil der Core die Rootline am Site
abschneidet. Symptome sehen unverwandt aus (fehlende FormEngine-Platzhalter,
leere Template-Layout-Listen, nicht erscheinende FlexForm-Sheets), Kennzeichen
ist: Frontend richtig, Backend falsch. Mit den drei Pruefungen, die das
Loeschen vorher absichern, und Soft-Delete statt DELETE.
Design-Parity 1.9 - drei Punkte:
- Vergleichsschleife: um zu belegen, dass ein Eingriff das Frontend NICHT
veraendert, muss vor dem Diff das Render-Rauschen weggefiltert werden
(picture-/img-Hashes, CSS-mtime), sonst weicht jede Seite ab und der Beweis
faellt aus.
- Neuer Abschnitt zum Backend-Formular mit Playwright: es steckt in einem
iframe (und der naheliegende Frame-Filter erwischt den Hauptframe mit),
innerText ist in inaktiven Tabs LEER, auf den eigenen field-item eingrenzen,
Tab-Aktivierung ist unzuverlaessig, den SAVE testen - und die UI-Reichweite
einer Aenderung an einer FormEngine-Renderbedingung vorher/nachher zaehlen
(aus 9 Schaltern wurden unbemerkt 83).
- Settings: Booleans in settings.yaml gehoeren in Anfuehrungszeichen. YAML
true wird zum Constant "1", YAML false zu einem LEEREN Constant; das
Frontend ueberlebt es, der Backend-Platzhalter nicht.
Deploy-Skill 1.3 - die dort empfohlene Form MYSQL_PWD="$(cat …)" wird fuer
Schreibzugriffe regelmaessig blockiert. Durchgegangen ist ein Skript, das das
Passwort selbst aus DBPASSFILE liest, sodass nur ein Pfad in der
Kommandozeile steht. Dazu: solche Skripte gezielt und idempotent auf dem
aktuell gespeicherten Stand arbeiten lassen statt ein vorbereitetes Blob
zurueckzuschreiben, sonst ueberfaehrt man den parallelen Save eines
Redakteurs.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Design-Paritaet 1.5 -> 1.6:
- Site-Set-page.tsconfig erreicht keine Datensaetze in Ordnern neben dem
Site-Root; solche Konfiguration gehoert in die globale page.tsconfig
der Extension. Symptom ist, dass eine TCEFORM-Aenderung genau fuer
einen Datensatztyp wirkungslos bleibt.
- Angebotene und gerenderte Crop-Variante koennen auseinanderlaufen,
dann beschneidet die Redaktion ins Leere.
- Feste Bildhoehe laesst das Seitenverhaeltnis ueber die Breakpoints
wandern, sodass kein Zuschnitt mehr ueberall passt; aspect-ratio statt
fester Hoehe.
- Umbrechende Labels brauchen eine reservierte Zeilenhoehe, sonst
springt der Rhythmus des Rasters; dabei die Untermarge des Absatzes
neutralisieren und die schmalste Geraetebreite pruefen, nicht nur 360.
- :has() laesst sich nicht in :has() verschachteln, die Regel wird
komplett verworfen - ohne jede Fehlermeldung.
- Neuer Abschnitt zu Meldungen, die Rasterartefakte statt Fehler sind:
gegen die Referenzseite pruefen, ueber mehrere Zoomstufen UND
Subpixel-Versaetze messen, das Ganze per Canvas in einem Durchgang -
und rechtzeitig sagen, dass Geometrie es nicht loest.
v11->v14 1.1 -> 1.2:
- Ein "verlorenes" Feld ist oft ein umgebautes Feld; zwei Spalten werden
gern zu einem Feld plus Schalter. Erst das neue Modell pruefen, bevor
man eine fremde Extension patcht - dann ist es eine Datenmigration.
Dazu die abgesicherte UPDATE-Bedingung und der Hinweis, dass Fluid
keinen !-Operator kennt.
- Vor "Regression" gegen die Referenzseite pruefen: zwei Tickets zum
selben fehlenden Element koennen Verlust und Neuwunsch sein.
Cutover 1.1 -> 1.2:
- Eingebettete Fremddienste sperren sich per frame-ancestors oft gegen
Staging. Solche Tests sind dort in keinem Browser moeglich; frueh
klaeren, den eigenen Anteil trotzdem pruefen.
Redmine 1.3 -> 1.4:
- Textile beendet den Durchstrich am ersten Bindestrich im Text, ein
Pfeil laesst also die Handlungsaufforderung ungestrichen stehen; HTML
hilft nicht, Redmine escapt es. Und das Ergebnis nachsehen, die API
bestaetigt nur die Speicherung.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
After a v11->v14 upgrade, non-admin editors often can't edit content
(no edit icons) and/or the Media tab is missing, even though the group
has "edit content" and tables_modify includes tt_content. The upgrade
wizards do not convert the backend group access-lists. Document the fix
for all three facets on be_groups:
1. explicit_allowdeny: v<=11 ":ALLOW"-suffix format vs v12+ exact
inList match (no suffix) — REPLACE strips it; blocks ALL editing.
2. CType allow-list missing renamed v14 names (wst3bootstrap_* -> t3bs_*,
ws_slider, heroitem, news_*, address_*).
3. non_exclude_fields missing v14 fields -> hidden Media tab
(e.g. hero tx_heroitem_bg*).
Includes the read-only recordEditAccessInternals/check/doesUserHaveAccess
CLI diagnosis and the db_mountpoints red-herring note. Bump to v1.1;
extend description + when-to-use for the symptom.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Three reusable, placeholder-based Claude Code skills distilled from the IVV
Aachen TYPO3 v11→v14 project:
- typo3-v11-to-v14-ddev-upgrade
- typo3-t3bootstrap-live-design-parity (v1.1)
- typo3-konsoleh-staging-deploy
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>