- new generic vitec:rename-page --page=<uid|slug> --title="...": renames
a page, recalculates its own slug from the parent slug plus the new
title and cascades every descendant slug - the gap a backend rename
leaves open. Used to fix the "Engagament" page (#465): title, own
slug and five child slugs in one run, verified live (zero occurrences
left in the JSON)
- SubsolutionWorkbookImporter::norm() tolerates the engagament spelling:
the 39 delivered workbook metas carry the old page title, re-imports
keep matching (verified)
- typo3/cms-redirects installed - it had NEVER been installed, so every
"redirect follows" of the 10-23 renames was wishful thinking and all
old URLs answered 404. Backend slug changes now auto-create redirects
- EXT:redirects' auto-creation does not fire for CLI DataHandler runs,
so vitec:rename-page, vitec:normalize-slugs and
vitec:align-market-pages now queue their 301 sys_redirect rows
themselves in the same DataHandler run
- new one-off vitec:backfill-redirects: the 28 paths vacated on
2026-10-23/26, reconstructed from the command protocols, guarded
against existing redirects and live slugs; applied and verified.
Note the headless semantics: a redirect arrives as the JSON envelope
{"redirectUrl": ..., "statusCode": 301} with HTTP 200 - the front end
must act on redirectUrl (briefing updated)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Joe's 39 "- Completed" workbooks applied to all 39 sub-solution pages
(#467-#515); both workbook inboxes are now gitignored and the tracked
test workbooks untracked - filled deliveries live in the Nextcloud
- new Import\ProductFamilyAliases: the workbooks reference product
FAMILIES in the product slots; 11 labels map to a representative
product, consulted by BOTH importers after the exact title match and
reported as "-> family alias"
- flip-card icons: dummy SVGs fileadmin/icons/flow/<name>.svg for Joe's
10-name vocabulary, attached by the new attachIconFile() through the
shared idempotent attachFalFile() (extracted from attachUrlFile);
real icons later REPLACE those files in the Filelist (same sys_file
uid), every card follows without a re-import
- image slots: numbered grey placeholders per page and slot
(fileadmin/placeholders/pages/<pid>-NN.png, the id rendered into the
image; generic grey as fallback). An existing reference is never
overwritten; a real URL on re-import swaps the placeholder away
- page properties per sub-solution: og/twitter title + description
mirror the SEO fields, canonical_link points at the page itself,
abstract derived from the intro copy (~300 chars, word boundary),
keywords from the curated PAGE_KEYWORDS set
- spec head-matter fix rides along (version table was stuck at 1.21,
real state 1.23)
Open afterwards: 3 missing Datapath stories + re-apply, quotes on 16
story records (list to Joe), slug slash on page 467.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- New, deliberately separate pipeline for sub-solutions (markets and
solutions must never break each other): generator
vitec:generate-subsolution-workbooks (list from the page tree below
/solutions, 39 workbooks, every sub-solution matched to its record),
SubsolutionWorkbookImporter + CLI vitec:import-subsolution-workbooks,
and a "Sub-Solutions" tab in the VITEC Import module with its own
inbox migrations/subsolutions_xlsx_in/
- Targets the existing template 5 "Solution Detail" without changing
it: hero element in colPos 1, the remaining sections in fixed order in
colPos 0, found again by CType on re-import; existing empty sub-solution
pages are switched to layout 5, missing ones created hidden;
detail_page set on the solution record
- Workbook per the Figma "07 Solution Detail page": hero without video
teaser, intro with headline and without learn-more/portfolio, extended
icon list, own page-layout reference image
- Shared content elements: market hero/intro/insights relabelled
"Market/Solution", market intro gains the optional intro_headline
field (new column, requires extension:setup)
- Fix: DataHandler puts every NEW record with a positive pid at the top
of its column, so pages built in one run came out reversed. Both
importers now track the page order per colPos and write
tt_content.sorting explicitly after the DataHandler run; re-applying
repairs pages imported earlier (verified on the control-room
sub-solution and sub-market page 443)
- migrations/fill_test_subsolution.php: realistic test content from
vitec.com copy and images for the control-room sub-solution
- Docs section 5z