feedback widget served from /api/fe-comment/widget.js, note pad in
localStorage, submissions mailed via /api/fe-comment/submit with
recipients from the extension configuration; classic sites get the
script injected via AssetCollector when the jsonOutput setting is off.
An enabled master switch serves the widget EMPTY when off (no 404, no
console errors) and rejects submissions - the go-live kill switch, no
front-end build change needed
- URL swap finished: /_json prefix middleware, SPA fallback live with a
dedicated root rule (REQUEST_FILENAME of / is a directory) and a
query-string exception for the TYPO3 v14 install tool entry
(?__typo3_install on the site root - the backend Settings/Environment
modules depend on it); /api/ as a whole stays with TYPO3
- MailMessage::send() no longer exists in v14: fe_comment and the form
EmailDelivery (latently broken since the core upgrade) now send through
the Mailer service. Mail transport moved to SMTP against the local exim
so delivery errors surface instead of bouncing into the blackhole -
exim verifies the envelope sender, which therefore must be a routable
existing address (transport config lives in the untracked settings.php)
- Related-product card texts editable on the product record (table rebuilt
with uid/pid, TCA + inline field, one-time migration script); shared
RteCompare for the module badge and the CLI comparison - batch dry-run
now reports 0 writes instead of flagging every richtext field
- Workbook clarification cases executed: VisionIO-SD14, VisionSC-SD14 and
both Diamond OG records imported (40 fields, live-verified); ArtioSign
and ArtioView created hidden (uid 109/110) via
create_artio_records.php - the product table has no sorting column;
WallControl_10 mapping REVERTED and parked: the dry run revealed
aetria-wallcontrol already carries its own agency workbook, which
WallControl_10 would have overwritten. Manifest now 75 product /
24 family / 1 open
Implements the 18.09. strategy's phase 1 on top of the existing single
importer (which stays the one write path):
- new vitec:import-product-workbooks: runs vitec:import-product-workbook
per manifest entry (in-process sub-command), aggregates a per-file
report (writes/unchanged/na, URL-mismatch and error flags, details on
-v or failure) plus a summary; without --apply every run is a dry
run; --only filters
- migrations/products_xlsx/ now holds working copies of all 100 agency
workbooks in their category folders (git-ignored) plus the TRACKED
manifest.json: workbook path -> product slug, family entries mark the
K-level landing pages (never imported), product null = unresolved.
Generated from the 18.09. analysis + sitemap column K:
68 product / 17 family / 15 open
- --init-manifest resolves open entries against the full product table
(hidden records included): URL segment/filename vs slug, normalized
title, unique slug prefix; only unambiguous hits are written back
- single command compare is now tolerant of the RTE storage transform
(whitespace collapse + <p>-wrap simulation), fixing the known
every-run-WRITE false positive on re-imports
Post-dry-run hardening, applied the same day (69 products, 785 field
writes across two runs, zero errors, verified against the live JSON):
- PROTECTED_FIELDS title/urltitle in the single command: the stored
module mapping would have overwritten six canonical sitemap-V2
product titles
- the stored mapping predated the 18.09. defaults and silently dropped
`highlights` on every product; the single command now merges
DEFAULT_MAPPING under the stored mapping (defaults as base, stored
as per-field override)
- known limitation for phase 2: the g: composed fields report WRITE on
every run (RTE transform alters ul/strong markup beyond the p-wrap
normalisation) - the change watch must compare against stored
imported values, not the database
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>