# Commit-Hashes vor und nach der Historienbereinigung vom 09.10.2026 # # Die Produktiv-SQL-Dumps (dev/migration 2026/sql) wurden aus allen Commits # entfernt; Inhalt und Reihenfolge sind sonst unverändert, die Hashes sind neu. # Verweise in der Doku und in Commit-Nachrichten nennen die alten Hashes. # Spalten: alt neu Betreff (chronologisch) 5b8bdf4 313270b 12-05-2026 Frontend dev 092ee0e 8bfa378 13-05-2026 Frontend DEV + HUB 0a3e52d 36810ac 19-05-2026 Rebrand Pressekonto, Hub-Flux UI und Legacy-Media-Migration 9b47296 9844b41 Rebrand Hub+Flux d2ba22c 36c6499 create PM v0.5 e8c47b7 fd1f6bd 22-05-2026 Optimierung der User und Admin Panels 4bb9094 a8d1228 29-05-2026 Optimierungen Fixes am Code 0efabaf ba0ee12 Multi-Domain-Asset-Infrastruktur: geteilte Vite-Konfiguration und DomainAssetContext a000238 48993f5 User Panel: Phase-8-Abschluss, Titelbild/Lizenzen/Zeitzonen und KI-Pruef-Pipeline 8d8d957 b2b5ff0 Doku: Status-Sync 11./12.06., Decision-Update Preisstruktur und Phase-9-Plan 4419d9f 6b0ca3f Phase 9 Block 1: Gelb-Routing Direkt-Live, Slot-Verbrauch bei Veroeffentlichung, Submit-Gate d548f4b d2501ca Phase 9D: Tarif-Datenmodell, Cashier und hybride Rechnungskreise STR-/MAN- 1cd4d8e 9f610f4 P6.6: legacy:grandfather-subscriptions — aktive Legacy-Abos aus dem Rechnungsarchiv migrieren 894a943 808d94f USt-Behandlung: Netto-Preise, VatResolver und Steuer-Ausweis im MAN-Kreis 62e6b7e a9dd565 Doku: zentrale Billing-Referenz und Status-Sync Phase 9D 38fab64 b804dba Phase 9E (Backbone): Stripe-Produkt-Sync und Webhook-Verarbeitung mit STR-Spiegelung c8dc99c ed99ee2 Phase 9E (Abschluss): Checkout-Flows und Plan-Kontingent statt Quota-Stub 23ac8bc 7818c57 Phase 9F: Tarif-Seite mit Stripe-Checkout und Billing Portal 6a82e2a 5555be4 Buchungs-Seite: Feinschliff nach Review 8f3261d 840cc0d Checkout: Stripe-Tax-Adressanforderung erfüllen bda755f c5907da Admin-Zahlungsmodul: Zahlungs-Übersicht + Tarif-Verwaltung mit Stripe-Sync 036a534 b126254 Responsive-Härtung: Seiten-Header, Kontextleiste, Stat-Cards afcca34 d07b138 User-Panel-Restarbeiten: PM-Guard, Profil-Rework, USt-ID-Prüfung, Buchungspflicht-Adresse b714551 6ba260e Profil-Feinschliff: Pflicht-Badges, Fokus-Fix, Submit-Modal auf Switches 5a8da0c ad75886 PM-Vorschau: Workflow oben + farbig, Metadaten, saubere Inhalts-Typografie 25ea91d 1f31e10 Verlinkung & Backlinks: systemseitige rel-Auszeichnung (Decision-Update 11.06.) a7c30d4 a193097 Titelbild-Upload: Bildrechte in 5 Schritten + große Bildvorschau 6e0b2b1 5ca76c7 Titelbild: Bildnachweis als Pflichtfeld, Lizenzdetail-Reset bei Typwechsel cc7b3c3 ced39dd KI-generierte Bilder: eigener Lizenztyp, Anbieter-Bestätigung, Kennzeichnung 284d029 b52751f PM-Vorschau: Firma & Pressekontakt zusammengeführt, Sprache als Badge am Portal 970b490 4052225 PM-Vorschau: Firmen-Kachel im Stil der Firmenübersicht ad74133 234772b Doku-Abschluss 12.06.: README-Stand, weiteres/-Index, Next Steps (Phase-2/Magic-Link, Duplicate-Content) ec4aa1d ce5d6c9 Detailplan Umsetzungsphase: Launch-Slice aus Decision-Updates + Merkliste c804f3b e54f6e2 WS-1: Canonical- & OpenGraph-Meta zentral im Web-Layout 94cb209 f06650a WS-6: E-Mail-Verifizierung, Auth-Flow-Fixes & Legacy-Rollen-Sicherheitsfix 980763c c6b2b67 WS-2: Firmen-Scope für PMs & Magic-Link-Zugang für Pressekontakte 84f7eb3 55d974f Doku: Sicherheits- & Deployment-Hinweise (Auth, Rollen, Verifizierung) d98d297 f28b698 Security-Härtung Login & Magic-Link (Review 16.06.) f4ca452 512057c Security: 2FA-Bypass beheben & Login-Pfade konsolidieren ae79d5b 42b4288 Security: JSON-Login durchläuft die is_active-/Verifizierungschecks 068a5a4 265d1fd WS-6: Google-Login via Laravel Socialite 6c6b9e0 fec2148 WS-2: Magic-Link für Firmen & Pressekontakte vereinheitlicht + Schreibzugriff fe10adb 46d7ae3 WS-6: Google-Redirect-URI klargestellt (Portal-Domain, .de) + lokaler Testhinweis 2a62204 6431139 WS-6: Google-Redirect-URI auf Live-Domain pressekonto.com korrigiert 95007da 9bce9af WS-3: Recht & Compliance – Rechts-Kern (DSGVO/Persönlichkeitsrecht/Melden + Queue) 6668f49 eaae1e6 WS-3 abgeschlossen dokumentiert: B abgedeckt, A nach Phase 2 verschoben be7d179 f87c470 WS-4: Bestandsschutz-Abrechnung – gekoppelte Kündigung + Admin-Sichtbarkeit afefa86 c82c237 WS-4: Bestandsschutz im Kundenbereich als echtes Paket darstellen a054720 57afcab WS-5: Buchungs-Gate launch-ready – proaktiver Dashboard-Hinweis 253141c 3a1d2e6 Frontend: Editorial-Relaunch der öffentlichen Strecke + Ausgaben-Routing a2ff47e 7dbc238 WS-7: Live-Deployment-Checkliste + WS-6/WS-7 als erledigt dokumentiert 5a9aab7 97d69a1 Migration: PM-Datum korrekt übernehmen, UUID stabil, Zwei-Phasen-Runbook b63cd26 1306849 Credit-Wallet + Ledger + Tier-Preisableitung (Fundament) 3e88442 460a255 Pruefzaehler + Pruefkontingent (Decision-Update Phase-2 vorgezogen) c7a4c8b 0ff874e Boost-Geschaeftslogik (Decision-Update 2.2) 69411b4 c89589b Proof-PDF + Extra-PM-Verkauf ueber die Credit-Wallet (Decision-Update 2.1/2.3) 344aac0 bd7022f Wallet-Topup ueber Stripe (Credit-Pakete mit Bonus-Staffel) 77a4476 31bef7a UI: Credit-Wallet-Hub + Per-PM Add-ons im Backend-Pressekonto 3c61900 dac8fe0 UI-Feinschliff Buchungen: Tarife oben, Credits darunter, Preisliste, USt.-Modal 44b6761 2c41711 Veroeffentlichungs-Gate: proaktive Buchungs-Meldung + Schalter test-stabil 764d56e 7822929 Fix: kein Datenverlust beim 'Buchung auswaehlen' aus dem Submit-Modal dd5a937 6a7483e Doku: Credit-Oekonomie in WS-7-Checkliste + Umsetzungsstand im Decision-Update 82abdf6 0618080 Doku: Umsetzungsstand der Credit-Oekonomie im Decision-Update 028b059 326ff9b Editorial-Frontend: oeffentliche Unterseiten, Preise & Linkpflege 5feaa8a 624fca6 Zeitzone Europe/Berlin: unnoetige UTC-Konvertierung entfernt e962cc2 bcac326 Fix: Umbrueche bleiben beim Bearbeiten von Legacy-PMs erhalten af99189 4ab7460 Status-Widget: immer verfuegbarer Buchungsueberblick in der Topbar c43ef6a 7de0db3 Status-Widget: kompakte Topbar statt hoher Header-Leiste 3da3353 1ff1cc3 WS-8: N+1 entschaerfen und PM-Zugriffsmuster konsolidieren 1c5eede 1aa4391 WS-8: doppelte Logik konsolidieren (Tags, Kontakt-Query, Billing) 58b427f 7d03ded i18n: Default-Locale auf Deutsch umstellen (Basis fuer EN-Umschaltung) 446aada e96a118 Paket-Vorteile: dynamische, im Admin pflegbare Vorteilsliste je Tarif 474153a f6a8143 Preise-Seite: dynamische Tarif-Vorteile aus dem Plan anzeigen 1ac5bad 052b214 i18n: Auth-Views vollstaendig uebersetzbar machen (Readiness) 39f0af7 6cb7b79 Doku: Launch-Vorbereitung 18.06. (Status-Widget, WS-8, i18n, Paket-Vorteile) a82964d c7bd940 Optimierung Phase 0: Korrektheit & Security a5f3ddd 554a731 Optimierung Phase 1: Aufraeumen / toter Code 6cc4c2c 0344ac2 Optimierung 2.1: Admin-PM-Editoren nutzen Tags-Trait 26d5f1a 64349ce Optimierung 2.2: InteractsWithPressReleaseScheduling-Trait 1ee6710 fa995e3 Optimierung 2.3: formRules() via ProvidesPressReleaseFormRules 5ed60c1 b41d34e Optimierung 2.4: Kanonische Pre-Submit-Checkliste 64b16cd 8c53146 Optimierung 2.5: Kontakt-Helfer + tagSuggestionsFor zentralisiert 5d6a949 83d2ee6 Optimierung 2.6: reprocessAfterContentChange im PressReleaseService 28e9064 86ba6c1 Optimierung 2.7: Company::scopeSearchByTerm fuer die Admin-Combobox af86a16 3a18a2b Optimierung 2.9: HandlesAdminPressReleaseActions::findAdminPR() a3b069e 153bac7 Optimierung 2.8: Blade-Component 82455c3 6a1240b Doku: Phase 2 im Entwicklungsplan als abgeschlossen markiert 9ddfab6 dba7691 Optimierung 3.1: Company::scopeAccessibleBy() zentralisiert Firmenzugriff 2bf431c 4fc46b0 Optimierung 3.2: API-PR-Ownership-Scope + zentrale Eager-Loads f2c349a 9a93903 Optimierung 3.3: totes SetDomainUrl entfernt 9ed429f 31d407d Optimierung 3.4: Performance (Logging terminable, Single-Purchase memoisiert) 4466858 b255d90 Optimierung 3.5: Kleinere Zentralisierungen (VAT, findByEmail, Waehrung, Provisioning) 0d0edf1 31e01e4 Optimierung 3.6: Zugriffs-Gates und getrennte Impersonation-Sperre 6961cac 4c80b93 Doku: Phase 3 im Entwicklungsplan abgeschlossen markiert (3.1-3.3 nachgezogen) f20a95f 987a5a2 Optimierung 4.2: Published-Release-Query ueber PressRelease-Scopes zentralisiert 714a5cd e5a63bc Optimierung 4.1: Web-Portal-/Domain-Kontext extrahiert 3f68052 7625ec7 Optimierung 4.3/4.4 (Preise): Page-Data-Service + Invokable Controller 01f3f7f 418a2bc Optimierung 4.3/4.4 (Suche): Page-Data-Service + Invokable Controller debcf81 fef6bbc Optimierung 4.3/4.4 (Veroeffentlichen): Page-Data-Service + Invokable Controller e36f917 a2179ea Optimierung 4.3/4.4 (Newsrooms): Page-Data-Service + Invokable Controller f17e9a9 179dd8e Optimierung 4.3/4.4 (Newsroom-Detail): Page-Data-Service + Invokable Controller e19a209 ee74126 Optimierung 4.3/4.4 (Kategorie): Page-Data-Service + Invokable Controller f3aa27d e879a38 Optimierung 4.3/4.4 (Release-Detail): Page-Data-Service + Invokable Controller 241d67c 43c83ca Optimierung 4.3/4.4 (Home): Page-Data-Service + Invokable Controller b0353ab 8e0aeda Doku: Phase 4 im Entwicklungsplan abgeschlossen markiert (4.1-4.4) 54bab7e a8958c1 Optimierung 5.1: Tabellen-Concerns (Sortierung, Volltext-Heuristik, Stats) 6bf6a09 89842ac Optimierung 5.2 (Teil 1): ProvidesUserFormRules-Concern 178adb0 69395ef Optimierung 5.3 (Teil 1): Contact::displayName() abe9a0a 4067911 Optimierung 5.3 (Teil 2): Category::localizedName() 8141fe8 dc68404 Doku: Phase-5.3-Fortschritt (displayName/localizedName erledigt, Rest UI-lastig) dc4e397 63071a0 Doku: Stand & Wiedereinstieg-Abschnitt im Entwicklungsplan be1284d 055fd5c Optimierung 5.3: toten portalBadgeColor()-Helfer entfernt 1a30b13 c16b0b7 Doku: portalBadgeColor()-Klaerung im Plan vermerkt (toter Code entfernt) 38884a5 ed1aa07 Perf-Fix: User::accessibleCompanyIds() hydratisiert keine Company-Models mehr 6a406bf 07d98ed Perf: accessibleBy() nutzt company_id-Subquery statt materialisiertem whereIn 7d6b97f 580c918 Perf: Status-Counts der PM-Uebersicht via UNION statt OR-GROUP-BY 6d4965a 83bb2a7 5.4 (Teil 1): + categories/create umgestellt d2d88ed af15e84 5.4 (Teil 2): page-header in categories/* + companies/create,edit umgestellt 0087489 f3a9c42 Fix: fehlendes .search-wrap-Styling (Suchfeld in /admin/me/firmen unsichtbar) 0c373f5 2a3b561 5.4 (Teil 3): page-header in users/* + contacts/* umgestellt b9811b7 1eb2243 5.4 (Teil 4): page-header size=lg-Variante + press-releases/* + companies/index 25a4095 27a77bf 5.4 (Teil 5): page-header in roles/* + footer-codes/* + presets/* 8e90eb2 feda8be 5.4 (Teil 6): page-header in payments/invoices/legal/coupons/reports/newsletter ed396eb 077d313 5.4: + admin/press-releases/index umgestellt 8690425 1c75e61 5.4: empty-state auf customer/press-releases + customer/press-kits ausgerollt 9ee77c8 505852f 5.4: + 13 Wrapper ersetzt c829624 587d1fd 5.5: + 6 Flash-Bloecke umgestellt fc91f29 b1b832d 5.5: + 4 Auth-Seiten umgestellt 2b9d1b6 6b1d84f Doku: 5.4 abgeschlossen + 5.5 Teil-Stand im Entwicklungsplan 9e6f775 1729e35 5.2: gemeinsamen Firmen-Sync-Kern als User::syncCompaniesWithRoles() gezogen dbbf8a4 9fadfe6 5.5: + 6 Auth-Passwortfelder umgestellt 7c5518d 1503d3a Fix: rollenlose aktive Nutzer -> Backfill-Command + Import-Nachlauf 6523a13 0e08d8a 5.5: Auth-Components abgeschlossen (funktional gegengetestet) + Plan-Stand dd16bed 55d0804 5.3: PressReleaseStatus::badgeClass() zentralisiert + toten statusColor-Code entfernt 7803a12 349991a 5.2: User-Formular-Feldraster in Blade-Components (role/billing) extrahiert a25355e 90f3245 Plan: Phase 5 vollstaendig abgeschlossen (5.2/5.3/5.5 auf erledigt) 17b586f db7c1df Perf: customer press-releases-Liste ueber UNION statt OR-Paginate 26586d4 1a612e0 R0.1: tote Dev-Varianten-Routen entfernt (fehlende Views -> 500 auf BP24) fc7213e cb2fe97 Plan: Release-Entwicklungsplan (R0-R6) aus Vier-Achsen-Analyse konsolidiert f02adf1 a4184af R0.2: gdpr_consent_at bei allen Registrierungspfaden befuellen (DSGVO) c678e3a f9e3c64 R0.3: Newsletter-Sync-Binding config-aware + ehrliche Test-Sync-Meldung b64aa9f 17eaa80 R0.4: Seeder produktionssicher (PlanSeeder, keine Fake-Stripe-IDs, Dev-User-Guard) 8653abd c3db80c R0.5: eigene Fehlerseiten 403/404/419/500/503 (self-contained, domain-aware) c9641e9 ad2879d R1.1: Buchungs-Gate geprueft + safe-by-default; Legacy-Buchungspfade festgeschrieben f762c5b 54a2e64 R1.3: Quota-Reset als fester Bestandteil des Tarif-Modells festgeschrieben 36e1907 1e9c2f9 Plan: R0 komplett + R1.1/R1.3 erledigt 229ac11 a4d054b R2.1: Kontaktformular-Backend (Controller + Mailable + Brand-Empfaenger) a4ae82c 4e4aff1 Fix: legal-request-Honeypot nickt Bots wieder still ab e90bb3c 9875e7b R2.1 (Web): Kontaktformular auf der Kontakt-Seite aktiviert d1f32e0 5226f5d Plan: R2.1 erledigt + naechste Schritte notiert 66190f2 f6edb4a R2.2: HubPageData - Plan-Katalog + echte Plattform-Kennzahlen fuer die Hub-Landing bf81709 8d4b3b5 R2.2/R2.3 (Web): Hub-Landing live-faehig - datengetriebene Tarife, ehrliche Inhalte 1417753 38d7cca Plan: R2.2/R2.3 erledigt (Hub-Ueberarbeitung + Plan-Katalog-Pipeline verifiziert) 0acccee 47d03ec Hub (Web): Auth-aware CTAs, Kontakt-Modal statt Mailto, Pruefung-Wording 603ca73 88d6935 Kontakt: Hub-Domain-Anfragen gehen an die pressekonto-Brand-Adresse 268332c 515e249 Recht (Web): Vertrag-widerrufen-Button + zweistufiges Widerrufs-Modal im Hub 4ea3bae 8c0bf00 Recht: Online-Widerruf ohne Login (gesetzlicher Widerrufsbutton) - Backend e852416 8001280 Plan: Online-Widerruf (R3.0) erledigt + Follow-ups notiert 6621b03 d6461f5 Admin: Widerrufe laufen in der Recht-&-Compliance-Queue auf c7450da 258502b Hub (Web): statische Seiten (Rechtstexte, API, FAQ ...) rendern das Hub-Geruest 981be2f 239ec57 Plan: Rechtstexte-Architektur referenziert + Hub-Geruest-Vorarbeit notiert 8b8f299 1c3a52a Recht: Kuendigungsbutton nach Par. 312k BGB - Backend + Admin-Queue 6b2356e 52bc534 Recht (Web): Vertraege-hier-kuendigen-Button + Bestaetigungsseite im Hub 244c2ab 20d5398 Recht: Erloeschensklausel-Checkbox im Publikationsflow (Par. 356 BGB) a6c3aa6 b855cbf Plan: Kuendigungsbutton (R3.0b) + Erloeschens-Checkbox (R3.0c) erledigt c2d22c6 e9643e6 SEO: host-aware sitemap.xml + dynamische robots.txt je Domain dd09663 6e5d67c Web: Marketing-Seiten brand-aware (Titel/Meta) statt 'Business Portal 24' 2850d0f 7494f19 Plan: R2.4 SEO-Basics erledigt (Sitemap, robots, Meta) e4d154c f5bf282 Deploy: .env.example vervollstaendigt + Deploy-Runbook (R5.1/R5.2) 770fda7 2d1c7aa Web (R4): tote Alt-Frontend-Fragmente entfernt 7d2a312 d34088e Web (R3.2): Marketing-Platzhalterseiten zurueckgebaut 03b644e 5537041 Plan: R4.1/R4.2 Aufraeumen + R3.2 Rueckbau erledigt 46f1829 acb2a19 Doku (R6.6): veraltete migration-2026-Dokus mit Verweis-Banner versehen 5c2ef28 89550da Security (R6.2): Haertung nach Audit 27c92d5 f46795b Plan: R6.2 Security-Review + R6.6 Doku-Sync erledigt b36ecf7 9c9f7f7 Hub-Inhalte: Claims korrigiert + Widerrufs-UI zurueckgebaut (B2B-only, E2) ca777f2 73fc382 Web-Inhalte auf echten Funktionsstand: FAQ, Hilfe, Veroeffentlichen 136ecc8 0645d1d R3.2: Kontakt-/Ueber-uns-Routen zurueckgebaut, Spoke-Footer bereinigt 43f563c f3a95c8 API-Doku: echte Referenz statt Fantasie-Features c195878 d577ff5 R3.1: Rechtstexte eingebaut — Impressum, AGB v0.6, Richtlinien, Meldeverfahren 28b5980 545eb52 Preise nach Leistungsbeschreibung v0.2: B2B-Satz, Credit-Anker, Regeln 110f97d fc13038 T2neu: Archiv-Hinweis vor Submit ersetzt Erloeschens-Checkbox (B2B, E2) e2758ff efe7f86 Plan: Hub-Inhalts-Audit + Rechtstexte-Einbau dokumentiert (E2 B2B-only) 6438444 99ab47b Datenschutzerklaerung v0.3 eingebaut, Cookie-Seite zurueckgebaut 6f9a68b 8916bcc T1neu: Unternehmer-Pflicht-Checkbox im Checkout, protokolliert mit AGB-Version 1e15042 f0cd11a Plan: Datenschutz v0.3 + Cookie-Rueckbau + T1neu in R3.1 dokumentiert c523224 9832869 System-Mails im pressekonto-CI: zentrales E-Mail-Layout fuer alle Transaktionsmails 14b1822 9d3eef6 Plan: Tagesabschluss 03.07. dokumentiert (Rechtstexte komplett, T1neu, Mail-CI) 4f07104 43397ad Zentrale Rechts-E-Mail info@pressekonto.com fuer alle Rechtstexte b90e59a 3940d46 Umami-Webanalyse eingebaut, bis zum Go-Live deaktiviert 7624064 dc2b2b0 Plan: Klaerungsliste Rechtstexte komplett beantwortet (06.07.) 196f83a 7510e76 E3: Rechtstext-Versionierung in der DB (legal_documents) c54c694 0bec71f Ablehnungskategorien live aus der DB (rejection_categories) 5337a14 61a677a T13: Melde-Links sichtbar unter jeder Pressemitteilung 979e6b1 2a9be7a T10: DSA-Meldeformulare mit URL-Feld, Vorgangsnummer und Eingangsbestaetigung cc77e60 198be38 T12: Depublikations-Checkout mit Tombstone (config-gated) 361560f fac15f7 Plan: R3.1 komplett — Rechtstexte-System fertig (Suite: 956 gruen) 9a9e313 90fd171 Depublikations-Preis festgelegt: 35 Euro netto (O6, User 06.07.) d0ffe66 d754ef4 QA-Luecke geschlossen: Legacy-Medien-URLs redirecten wieder (301) 6ef4a0d 73f414e R6.1: QA-Checkliste erstellt, Vorpruefung abgeschlossen 3364fd1 3cd7395 Fix: Bestandsschutz ohne explizites Vertragsende zaehlte nie als aktiv 616b784 91992ac Uebernahme bestehender Legacy-API-Integrationen (Keys, Auth, Pfade) 5200686 387d41a Plan + QA-Checkliste: Legacy-Fixes vom 06.07. dokumentiert 5d199f0 3320aaa Rechnungsadressen der Bestandskunden aus dem Legacy-Archiv uebernehmen b3474a3 bfad13a Spoke-Frontend-Audit: Fake-Inhalte raus, Newsletter-Rueckbau, echte Boersendaten, EN-Lokalisierung b53af92 2c7b556 Produktiv-SQL-Dumps enttrackt (Security-Review-Befund R6.2) 8f90e6f 339ae5d Plan: Adress-Import, Key-Import-Verifikation und Git-Hygiene 06.07. dokumentiert 08b49a2 1904ea5 Platzhalter-Eintraege ("spaeter") aus der Panel-Seitennavigation entfernt 9ff0a6c b7bbf6d Panel-Navigation: Buchungen zu Finanzen, neue Gruppe Portale 62fbafa 15387d0 QA-Befunde A4: 2FA-Bestätigungsschritt + sicherer E-Mail-Wechsel af9f238 b42e0e3 2FA-Challenge: Fehlversuch crasht nicht mehr (Route two-factor.login fehlt) e7d5d58 4fe0882 QA-Checkliste: A1-A4 manuell abgenommen (07.07., inkl. 2FA-Fixes) fa4bc06 d1c9763 Buchungs-Modal: Dark-Mode-lesbare Preistabelle + aufgeraeumtes Layout 4b7403b 54213ca Stripe Checkout: automatic_tax aktiviert (USt fehlte in der Session) 4cda4d3 2a8fd01 STR-Spiegelung: USt aus total_taxes lesen (Stripe-API ohne tax-Feld) 7e571ee 5166fc7 Rechnungsseite: neue STR/MAN-Rechnungen gelistet, STR bei Stripe verlinkt 6eedaa4 304c581 Checkout: Profil-Rechnungsadresse als Stripe-Rechnungsempfaenger 256aca6 af15660 Checkout: Wallet-Daten duerfen Profil-Rechnungsadresse nicht ueberschreiben 9e76e24 b3780e0 Tarifwechsel im Buchungs-Modal: Abo-Swap mit anteiliger Verrechnung 9a95a69 db65c2e Suche: Volltext-Index + Fix fuer doppelte Alpine-Instanz 090a893 14994e4 PM-Vorschau: echtes Portal-Design, Direkt-Button und Portal-Switch 4b7f6d3 388ca0e Downgrade-Vorkehrungen: Kontingent-Sperre beim Tarifwechsel, Gutschriften nicht spiegeln ef2b4fe 80e04e2 Downgrades ohne Gutschrift: Tarifwechsel nach unten erst zum Periodenende c040f39 c4ccc75 Rechnungs-Seite: Archiv-Filter entfernt, Altsystem-Archiv nur für Bestandskunden fcfbbd4 acd241b PM-Editor: Ablehnungsbegründung direkt auf der Bearbeiten-Seite anzeigen 2a46aed 0f8f0b2 Einreichen-Modal: Panel-Struktur und fixierter Kontingent-Badge dfb8de9 9600a4f Add-ons: Modal statt Toast bei fehlendem Credit-Guthaben a21d635 d7f17bb PM-Detailseite: Depublikations-Sektion ans Seitenende verschoben 46ce2c1 930760a single_purchases: type-ENUM um depublication erweitern 9b55e11 28de92e PM-Detailseite: Direktlinks zur öffentlichen Seite je Portal 1ef1e13 881a583 Depublikation: abgebrochener Checkout blockiert nicht mehr 30c407f e457e7a Profilfeld users.agency_name für Übermittler-Attribution 621fc05 402fa4a legacy:migrate-agency-names: Agentur-Namen → users.agency_name 365971a a62a5ee PM-Detailseite: Attributions-Zeile Urheber/Übermittler 56fe5ea 85fddbf Attribution: Übermittler aus users.agency_name statt Agentur-Firma 0b3c6cc 59ac67a companies:retire-agency-type: Firmen-Typ „Agentur" abschaffen 26ce254 3ff95bc UI: Agentur-Angaben im Profil, Firmen-Typ-Auswahl entfernt c1382ce d57f6b5 Agentur-Attribution: Plan abgehakt, Abnahme-Status 08.07. dokumentiert 723d51c f6882b6 Depublikation: Kauf als eingelöst markieren, Rechnung & Bestätigungs-Mail f8e8f3e fe8bd2b Buchungsseite: Verlauf mit Kauftyp, Erfolgsmeldungen grün 6c4fd0c 3297179 USt-ID vor jeder Buchung per eVatR gegenprüfen, Stripe-Tax-IDs abgleichen 1822dcb 74e82eb Form-Hooks: Fehl-Scroll aufs erste Feld bei Live-Validation behoben c387048 807fbc1 KI-Kennzeichnung (Art. 50 KI-VO): Pflicht-Deklaration für Text & Bilder 2882bc4 f11e8aa PM-Editor UX: Kategorie in die Schreibfläche, Bild-Upload als Modal-Flow 75d7baa a254bbd Depublikation: Credit-Preis auf 35 (O6), Preis-Tests nachgezogen c2ec18b ac870a4 Buchungsseite: Buchungs- und Verlaengerungsdatum des Abos aus Stripe dc65cfc 07e0bc5 API-Doku: OpenAPI-Spec aus public/ statt geloeschtem docs/ ausliefern 1ad2e54 6984846 Monitoring (R5.3): Betriebs-Alerts fuer Scheduler-/Queue-Ausfaelle ef5de54 c6b5ec8 Release-Doku: Stand 09.07. nachgezogen; Runbook FULLTEXT-Fenster + Monitoring 72e6a3c fd8e050 Backend-WIP: Kontakt-Queue, Page-Cache, Validierungs-Feedback, i18n 79658bd d1939f6 Web-Frontend: Umbau Spokes/Hub, Kontakt-Widget (contact-launcher) 80a37f8 60d0d9b Release-Doku: Commit-Session vermerkt + Wiedereinstieg fuer morgen 644f860 8f59704 PM-Tracking: Ereignis-Log fuer Aufrufe + Shares (press_release_events) 34ec14d 34f0e0f Web-Frontend: Aufrufe-Anzeige + Share-Tracking auf der PM-Detailseite 2ef41a4 0603fe5 R2.5: legal-request-Hinweistexte final (Wortlaut aus Meldeverfahren v0.1) bb6a0a0 460e092 QA-Checkliste B-G vertieft (Nachpruefung 10.07.) 56ea3d0 459b339 Dev-Stack: Queue-Worker lauscht auch auf der classification-Queue 813cbd2 01e175e R4.3: Karten-Metadaten-Logik als PressRelease-Praesentations-Helper 9b2409e 3843e53 Web-Frontend: Kartenkomponenten auf PressRelease-Helper umgestellt (R4.3) 5c91e2e 92af015 API: KI-Deklaration als v1-Pflichtfeld, Legacy-Default fuer /service (Entscheidung 10.07.) c778e41 b185985 Web-Frontend: /api-Doku mit KI-Deklarationsfeldern (curl-Beispiele + Hinweis) fef4573 5a35242 API-Legacy-Paritaet: Arbeitsdokument mit Alt-Vertrag, Log-Auswertung, Schrittplan a3fd361 6a45ebf Legacy-API-Paritaet S1+S2: connektar-Flow verhaltensgleich + KI-Schalter 2820385 d9f25ae S4: legacy:seed-api-testdata — API-Testkunde nach connektar-Muster 00f67c4 7a573ca Mail-Routing: API-Einlieferung ueber Status-Log-Quelle erkennen de532fe 9cb53b1 API: nicht-numerische Routen-IDs als 404 statt TypeError/500 3ae57d9 b26dc90 Admin-PM-Liste: KI-Pruefungs-Modal + geschaerfte KI-Prompts c883656 93d7f6d Add-ons: Kaufbestaetigung vor Credit-Abbuchung + deutlichere Buttons dc2a344 0cda194 KI-Kennzeichnung: 2 Optionen im Submit-Modal + Labels auf Detailseite 744e87d 0665553 Werbeplaetze reaktiviert: Eigenwerbe-Slots oeffnen das Kontakt-Widget bbcdc72 df6b245 Web: Boost-Platzierung auf Start- und Branchenseite ausspielen 927523c 47c1cac PM-Liste: Hinweis auf laufende Boost-Platzierung unter dem Status 06d80b2 484e062 KI-Klassifikation: Substanzpruefung gegen Gruen-Durchrutscher 51da374 d5b8064 E-Mail-Praeferenzen: Opt-out je Mail-Typ + One-Click-Unsubscribe ohne Login 6e1267f cc61bf2 Add-on-Modal: Pflicht-Schalter + Verlaengerungs-Hinweis bei laufendem Boost 9d6ef50 6be387c Boost-Buchung invalidiert gecachte Start- und Branchenseiten sofort b1be14e 0677728 Doku: Boost-Platzierung offene Punkte (Hero-Slider, Boost-Begrenzung) fuer Montag 4853d48 0474d22 Boost-Slot-Grenzen (5/3) + Kategorie-Boost zum halben Satz 7a32c66 6796fa4 Preise-Seite: zwei Boost-Stufen inkl. Slot-Hinweis in der Leistungsnote d92e0f6 842d6a2 Doku: Boost-Platzierung entschieden + umgesetzt (Slot-Grenzen, Kategorie-Boost) 92d1ac2 0cddf5f Add-on-Panel zeigt freie Boost-Plaetze je Stufe 8657311 4f2be1e PM-Uebersicht: Rubrik unter Portal, Boost-moeglich-Hinweis, gruener Haken 7b3a4d7 6f96e4a PM-Detailseite: Inhaltspruefung (Gruen/Gelb/Rot) + Qualitaets-Score sichtbar b3fdd6f 3295f47 deps: Sicherheits-Updates (Framework/Symfony/Guzzle) einspielen (H6) 7043ea8 aae4569 billing: Nebenläufigkeit & Idempotenz härten (H4, Stripe, Boost-Slots) 0b35c3b 6e84266 press-releases: Publish-Rechte, Quota-Races & Slug vereinheitlichen 000ae93 6250b0b media: PM-Medien privat ausliefern + Vorschau-Signatur (M4, M5, Fix#4/#5) 299837d 39e13d6 security: Host-Whitelist & Legacy-API-Key-Übergabe härten (H5, M11) 4078319 77f8f9c security: Rechteausweitung schließen & Admin-Panel feingranular gaten (K1, H1, H2, M8) 6764fb9 8f517e9 security: Stored-XSS über page_url im Kontaktformular schließen (H3) ea8d017 fe1525b auth/mail: Magic-Link-2FA (M1) + Mailversand über die Queue 1afcc36 5a49292 newsletter: Bestätigung/Ownership beim Re-Abo korrigieren (M7) 22975e7 23cbd0b performance: Caching, deferred Tracking & externe Timeouts (H7, M12, M13) 573e4ca 830aca5 admin: Betriebsüberwachung im Backend (Queue-Worker & Deployment-Checks) 198ce15 e51fe6f chore: persönliche VS-Code-Workspace-Datei aus dem Repo entfernen 6f6cb13 74f71f7 docs: Audit-Protokoll, KI-Kennzeichnung & Release-Notizen a546378 700f5e6 dashboard/errors: Onboarding-Card „Erste Schritte" & Hub-Styling der Fehlerseiten 244b7ba ce59cbb auth: Selbst-Registrierungen nicht mehr als Legacy-Bestand einstufen 8a695fd 0b01929 profil: Speichern-Buttons für Persönliche Daten und Konto & Sicherheit 4cc74c2 67f6906 billing: Stripe-Webhook von der Basic-Auth ausnehmen ff2eee0 425467b billing: asynchrone Zahlarten (PayPal, SEPA) korrekt erfüllen 71b247b e32431e billing: Zahlungsbestätigung per Mail nach jeder Buchung f1dcb9c 37bcf73 billing: Blindkopie der Zahlungsbestätigung an LEGAL_CONTACT_EMAIL 5585a26 a574898 billing: Stripe-Belege auf Deutsch und sprechende Produktnamen 991af42 3a11963 admin: Aktivitäts-Verlauf unter Reports ▸ Verlauf 7c252ab a3671ba emails: Portal-Wortmarken im Mail-Header ergänzen 47f224f 3e85537 web: Kategorie-Badge im Feed bricht auf Mobile sauber um 6253b36 9c67fc6 docs: Cutover-Runbook für den Go-Live (Legacy-Import & Umschaltung) c70e175 dec5249 web: Responsive-/Mobile-Fixes fürs öffentliche Frontend 379688f 2ea64ad web: Strukturierte Daten (JSON-LD) und SEO-Metas fürs öffentliche Frontend b8e2735 07d89a0 web: Preise-Seite zeigt unter Weitere Leistungen nur noch Depublizieren 50d9208 a130299 billing: Veröffentlichungsnachweis mit Titelbild, Bildrechten und Rich-Text 4c73ba0 3151b1f legacy: privatize-media überspringt unmigrierte Legacy-Bildzeilen, --prune-missing löscht sie 2765afe 7971656 legacy: fix-timestamps liest Legacy-Schema-Namen aus der DB-Config statt hartkodiert 3842fbc 9be4731 billing: Abo-Kündigungen aus dem Stripe-Portal im Aktivitäts-Verlauf 263f030 22b7bd3 docs: Runbooks auf den echten Migrationsstand nachgezogen (16.07.) 4668cfc a0c2e66 legacy: --since-Delta für legacy:import + Importer setzen Timestamps wieder korrekt c8a292e d212230 docs: Cutover-Delta nutzt --since, Medien-Delta-Hinweis 622cd4e 5011f28 legacy: API-Key-Import löst E-Mail-gemergte User über legacy_import_map auf da189c0 bd4ad85 web: Stale-while-revalidate-Cache für die öffentlichen Seitendaten 6fcc825 3d10cbf web: Startseiten-Feed cachen + Index gegen Filesort der Feed-Query e69ded4 acf6721 web: www-Hosts lösen aufs Apex-Domain-Theme auf statt aufs Portal-Fallback fcf8304 42e56a7 web: www-Hosts leiten kanonisch per 301 auf die Apex-Domain 3d1bf38 58c773b web: Domain-spezifische Favicons und App-Icons für alle drei Marken (R5.4) 665c94f 6a4c4d8 docs: dev-Doku für den Live-Betrieb neu sortiert — Archiv + Betrieb + Roadmap 8aba835 783b9da docs: verschobene Doku-Pfade in Code-Kommentaren nachgezogen 7b27ec5 8743bcb Release: Go-Live Pressekonto (20.07.2026) 99f10e6 fa30336 docs: R6.5 in der Roadmap abgehakt (Merge nach main + Tag v1.0.0) e59e132 e3ce626 admin: PM-Detailseite verlinkt Firma, Autor und Firmen-Benutzer 33e84af d411e6c admin: Verlauf protokolliert jede versendete E-Mail f327853 215cbcb admin: internes Newsletter-Modul mit Filtern, Protokoll und Abmeldung 80c5f03 ab0030d web: Mail-Abmeldungen landen im Aktivitäts-Verlauf 3f4679f 37e543e admin: Credits und freie PMs ohne Zahlung gutschreiben ed458b6 5bf9f84 admin: Verlauf protokolliert den Gang zur Stripe-Zahlung 17e22d2 921c533 admin: Benutzer-Übersicht verlinkt die Detailseite zusätzlich zur Schnellansicht 45dc4ce 9b73972 kunde: PM-Liste zeigt Firmen-Kontext unter der Headline und Bild-Thumbnails 021ee2d 58c0cc3 admin: Newsletter mit Abmelde-Liste, Follow-up-Filtern und gedrosseltem Versand 04b49c5 b4b2e01 recht: Meldeverfahren v2 Phasen 1-4 — Re-Sync-Sperre, Anonymisierung, Magic-Link-Intake, Self-Service-Korrektur e6eca9c 9afbedd recht: Meldeverfahren v2 Phasen 5+7 — DSGVO-Strukturformular, 10-€-Checkout mit KI-Vorprüfung, Triage & Panel-Modal 8fc18c2 f8728c5 technik: Volltext-Indizes von press_releases in eine eigene Suchtabelle auslagern d14cb84 6a34ab4 technik: Aufrufe über ein Ereignis-Log zählen statt im Request 2024df9 0c8e94a web: Entfernung mit 410 Gone als Alternative zur Löschung 48d401e 982de2a api: Ziel-Portal einer Einreichung explizit auflösen statt vom Konto erben 49182ec e634af0 newsletter: Unzustellbare Adressen aus beiden Empfängerlisten nehmen eb1eba4 f6934f5 mail: Anrede an den tatsächlichen Empfänger binden e746ded e783adc technik: Statische Analyse wieder aussagekräftig machen 8d41669 a85f6ba db: Index auf companies.email 81d9c43 ac4b959 dev: Bestandsaufnahme und Umsetzungsprotokoll zum Code-Durchgang 01.09. aab2240 c497628 reports: Basiswerte für die Konversionsmessung (Roadmap 0.1 und 0.2) 2391c85 748a0d4 reports: Aufrufe nach Alter aufschlüsseln und Basiswerte festhalten 2691a4d 45f2d90 conversion: Konversionsleiter mit Herkunft auf dem Magic-Link-Token (Block 0) e536e52 8df6b9e companies: Trockenlauf zur Newsroom-Konsolidierung (Roadmap 1a.1) 5d0570b 7c40a0c companies: Tippfehler und Zusätze im Trockenlauf als dieselbe Firma erkennen 5e46ff9 a0ac32c companies: Adress-Klassifizierung persistieren (Roadmap 1a.2, E1 = 3) 5e5414a c17e4b9 dev: Live-Trockenlauf der Adress-Klassifizierung protokolliert e2f7cf1 8a1e79a dev: scharfer Klassifizierungslauf auf Live protokolliert 00af8b1 77318dc companies: Aufrufe als Veröffentlichungsnachweis im Altbestand werten 982bd6e 66d8398 api: Token-Gate erkennt aktive Stripe-Abos 8b86b88 2aebb9d companies: Zusammenführung im Bestand, rückabwickelbar (Roadmap 1a.3) 1368e2c f3e7aca dev: Live-Trockenlauf der Zusammenführung protokolliert 202cf34 235c20c companies: Zusammenführungen zum Nachprüfen auflisten cd16fd1 b91f41d dev: Live-Läufe der Zusammenführung protokolliert d60f31d 4303266 dev: kompletten Live-Lauf der Zusammenführung protokolliert 8baca9d 8dad652 api: neue Firmen dem bestehenden Newsroom zuordnen (Roadmap 1a.4) 0be476b 0f52e9f dev: Block 1a in der Roadmap als erledigt markiert, 1a.4-Entscheidung festgehalten abfcd77 a3e0042 newsroom: Seite verschwindet mit der letzten veröffentlichten Meldung (Roadmap 1b.1/1b.5) 9143cc4 0c1c072 newsroom: Verwaltungszugang „Diesen Newsroom verwalten" (Roadmap 1b.2) 0101488 7f714fb newsroom: Hinweis „Diesen Newsroom verwalten“ auf der Seite und in der Mail (Roadmap 1b.4, E4) 079477a a69b021 web: Melden- und Verwaltungsblock auf der Meldungsseite hervorheben 87f95fb 85b039e newsroom: Beschreibung pflegen, durch die Rot-Ebene geprüft (Roadmap 1b.3) 0a658bb 8bf40ee mail: zentrale Bounce-Suppression mit Versand-Gate und Circuit Breaker (Roadmap 1b.6, Schritte 1–2) e800065 f9c97cc mail: Rückläufer aus dem Bounce-Postfach lesen (Roadmap 1b.6, Schritt 3) e84c277 e7e12b9 admin: Mail-Sperrliste, Markierung nicht erreichbarer Newsrooms (Roadmap 1b.6, Schritt 4) 71d9639 6e159ec deps: Composer- und npm-Pakete innerhalb der Constraints aktualisiert fddfd8a 4cefdf7 mail: Bounce-Abruf liest RFC 6533, All-Inkl-Freitext und ganze INBOX ada41cb f581e1e mail: Kontakterreichbarkeit - Formpruefung, Domainpruefung, Einlieferer-Bericht 36691a5 a00f9dc billing: MAN-Rechnungen fuer Ueberweisungskunden bearbeiten, hold-Altlast bereinigen 09ec866 3ef1b84 customer: Sichtbarkeit belegen - Aufrufe im Verlauf, Newsroom-Uebersicht (Roadmap 1c) 58bc82a 7fb5a2f billing: tote Null-Pruefungen auf NOT-NULL-Spalten entfernt (phpstan) c08c9e5 5f7fbd0 web: Hilfeseite "Was eine gute Pressemitteilung ausmacht", Hinweis in der Ablehnungsmail (Roadmap 1d.1, 1d.2, 1d.6) 0692d89 13716b9 press-releases: begrenzter Pruefkreislauf mit Admin-Queue (Roadmap 1d.4, E3) 35db30e 9380937 mail: adressbezogene Abmeldung fuer Empfaenger ohne Konto (Roadmap 1d.3) 4fd1db7 4dffb13 press-releases: Mail "wird persoenlich geprueft" beim Block, Blade-Guard fuer @php-Bloecke (Roadmap 1d, Nachtrag) 87ca908 5d8e379 companies: Kurzfelder des Profils ohne Links, Adressen und Spam (NoPromotionalText) 99ffd01 8ea5e52 companies: Links aus Firmennamen normalisieren — API-Eingang und Bestandsbefehl 713024b 8cd76df companies: Befehl zum Deaktivieren der Legacy-Linkspam-Registrierungen b74f881 b60a28d web: Entitaeten im JSON-LD verknuepft, News-Sitemap und llms.txt (Roadmap 2.1, 2.2, 2.7) 84ea617 4616bb7 web: Jahresarchiv je Branche, Kategoriebeschreibungen, Portalname im Titel (Roadmap 2.3) b6e4bc5 106edb1 web: Transparenzseiten — was kostet, ohne Abo, loeschen/aendern (Roadmap 2.4) 1fd6d2c c96c8a6 web: Transparenz-Navigation ueber der Headline der Preisseite (Roadmap 2.4) 6446e19 134af42 web: Unter-Navigation Preise/Transparenz auf allen vier Seiten mit aktivem Punkt 7088d09 951b6c4 web: Crawler-Abruf-Protokoll und Panel „Auslieferung" ohne Google-Link (Anhang 1: 1c.0, 1c.1, 1c.6) 6c4618a 6b87282 admin: Indexierungsstatus aus der Search Console, Kundenansicht vorbereitet und zu (Anhang 1: 1c.4, E8) f1648a0 3751386 web: Erstquelle-Absatz in der Veröffentlichungsmail, vierte Transparenzseite „kostenlos veröffentlichen" (Anhang 1: 1d, 2.4, E7) b44fded 3c6fb69 admin: URL Inspection immer auf en-US abfragen 10c91ac d9e181a docs: Search Console live, Schlüsseldateien ausgeschlossen, Kontingent erklärt 447dc4c 87558ab web: Hilfe in der Topleiste neben FAQ; 2.5/E5 geschlossen ee267c6 4edb915 web: Doppelveröffentlichung — Prüfsumme, kanonische Zuordnung (aus bis E9), Quellenauskunft, noindex im Portal (Anhang 2) 4c17a17 5dcaf4e web: E9 und E10 entschieden — Zuordnung aktiv, eine Adresse je statischer Seite, Hub-Portalseiten leiten weiter 24c1bbf edb2d49 web: Portal-Inhalte sind auf dem Hub nicht mehr erreichbar (Anhang 2, E10) 0ab53bf 1d76f5a auth: Firmenrechte nur aus nachgewiesener Adresse, 2FA auf allen Login-Wegen (Audit Block 1, Deploy A) 62202a4 301bca3 auth: automatische Firmenrechte mit Herkunft und Entzug, Nachweis vor Sicherheitsaktionen (Audit Block 1, Deploy C) a7f991f eeb1cde newsletter: jeden Empfänger genau einmal, atomarer Start, Wiederanlauf (Audit Block 2, Deploy B) f235156 72432fd web/api/ki: Soft Deletes wieder wirksam, Caches bei Firmenwechsel, KI-Ergebnis an Inhalt gebunden (Audit Block 3+4, Deploy D) 375f4df 9a88e82 billing/dev: Vertragsende in der MAN-Abrechnung, Rechnungslauf ohne Tageskappe, Qualitätsgates (Audit Block 5+6, Deploy E) 4fa9859 226fb81 dev: Umsetzungsprotokoll und Live-Schritte zum Audit-Entwicklungsplan ec6705e 207f103 tests: Kategorie-Portal in den API-Tests festlegen c882194 2e8c081 tests: Titel in der MAN-PDF-Adresse festlegen fb03fb1 c46dfd3 dev: Protokoll — Gesamtsuite grün, zwei zufallsabhängige Tests festgezurrt 1cd9fd1 eb95b3b billing: Vertragsablauf bedingt beenden, Kundenmail nachholbar (Block 7, U11/U12) 235d392 05cf53e security/api/betrieb: Fortify-2FA-Nebenwege gesperrt, Policy nur für aktive Super-Admins, Nachprüfungen aus dem Umsetzungsaudit (Block 7, U08–U10, U13, 7.1, 7.2, 7.5) ea68362 082e6bb ki/quota: Hash-Bindung atomar bis in den Publish-Lock, roter Re-Check lehnt ab, Kontingent-Altbestand (Block 7, U02–U04) 7819527 1c421c0 dev: Umsetzungsaudit vom 18.09. abgelegt, Block 7 mit Abgleich, Entscheidungen E7–E9 und Protokoll im Entwicklungsplan 3ea9688 c26bdff admin: Bericht „Indexierung & Abrufe" — Rolle Erstquelle/Kopie, Quellenbefund, Crawler-Abrufe; Schlüsselpfad ab Projektwurzel b8c6af5 5122624 auth: automatische Firmenzuordnung beim Wegfall der E-Mail-Grundlage entfernen statt senken (Block 7.13, U01, E7) 2ec6169 85d7c2b betrieb: Logs je Thema in Tagesdateien (billing, ki, monitoring, market); Doku: Duplicate-Content-Decision durch Anhang 2 abgelöst b423650 e2ef4de admin: Search-Console-Vorgabe für businessportal24 auf die .com-Property d0c7194 9d5e5a0 web: RSS-Feeds je Branche und je Portal (Roadmap 3.1); dev: Sichtung des Ordners, Protokoll-Teile umnummeriert 23811ad ff75159 web: RSS-Feed je Newsroom, RSS-Übersichtsseite, „RSS" in der Topleiste (Roadmap 3.1, Nachtrag) 44d0bb6 fc70067 web: Abruf-Protokoll der RSS-Feeds — Reader-Dienst, gemeldete Abonnenten, Admin-Bericht, Panel (Roadmap 3.1) e620ef3 2b042d6 web: Datenschutzerklärung — Abschnitt 5a „Eigene Nutzungsstatistiken ohne Personenbezug", Frist 395 Tage (Roadmap 0.7) dab14dc eb65802 press-releases: assign-canonicals leert Seiten- und Sitemap-Caches; dev: Live-Lauf 21.09.2026 protokolliert (9.221 Paare) f9019ee 1c38c82 reports: Kohortenalter ab Stichtag statt ab --to; legacy:settle-unpaid kennt bereits ersetzte Quellen; dev: Basiswert 0.1 vom Live-System ausgewertet 5ef123c 2b5960b dev: Basiswert 0.1 abgeschlossen — Kohorte 28–55 Tage am Stichtag 21.09.2026 (Median 122 / 314), Nach-Deploy-Stand 605d853 6df36c9 dev: Roadmap Block 0 — 0.2 bis 0.6 als erledigt geführt (Stand Protokoll Teil 2) b624f80 83cb6e1 assets: Inter (18pt-Schnitte) mit OFL 1.1 für den eingebrannten Bildnachweis (Bildkennzeichnung O4) e9bdff3 214aea8 images: Datenmodell, Textarchiv, Herkunftsprüfung und gemeinsamer Uploader für Formular v2 (Bildkennzeichnung Block A) 40953d6 3d3ddc2 images: Titelbild-Formular v2, Admin-Upload mit Kundenbestätigung, Entfernen mit Sofortlöschung (Bildkennzeichnung Block B) 65ac72c 24184f1 api: Bildupload v1 unter Formular v2 (Pflichtfelder, Kennung des Wortlauts, Bestätigung mit Token), Legacy-Bildupload abgeschaltet, API-Doku (Bildkennzeichnung Block C) 2124ffd 9f44546 web/admin/pdf: gemeinsame Bildnachweis-Auflösung, Detailfenster am Artikelbild, Bestätigungsstand in Kunden- und Adminansicht, Wortwahl „automatisierte Prüfung" (Bildkennzeichnung Block D) 46b89e1 da167b7 images: Lebenszyklus — Veröffentlichungsgate, published_ever_at, Snapshot der veröffentlichten Fassung, Sofortlöschung, Legacy-Bereinigung, Beweiszugriff, Korrekturweg (Bildkennzeichnung Block E) 0240c14 b5b7041 archive: Beweisarchiv — verschlüsselte Einträge, Legal Hold, Purge mit Tombstone, Restore-Abgleich, Auslöser und Admin-Seite (Bildkennzeichnung Block F) 62723b5 075d0d9 legal/web: Zustimmungsgate je Dokumentversion (aus bis AGB 0.7), OG-Variante mit eingebranntem Bildnachweis, Nachweis in Teasern (Bildkennzeichnung Blöcke G und H) 3b613fa 70e15d5 images: press-release-images:regenerate-variants --only=og für den Bestand, Testhelfer eindeutig benannt (Bildkennzeichnung H.1) 0e5cd20 8bb7049 images: KI-Vorab-Check für Titelbilder — Vision-Sichtung mit definiertem Ausgang je Befund, Admin-Queue, Protokoll und Archiv-Snapshot (Bildkennzeichnung Block K) 6d558cd bcd02f2 web: KI-Badge am Artikelbild nach rechts unten, damit es das Nachweis-Zeichen links nicht überlappt (Bildkennzeichnung D.2) d99f55e aaeee24 admin: Management ▸ Bilder — Liste aller Titelbilder mit PM-Link, Nachweis, Kennzeichnung, Bestätigungsstand und KI-Vorab-Check, Filter nach Sichtung/Zustand/Ausgang (Bildkennzeichnung) 4e34c3d 34fa342 tests/legal: Testdatenbank-Guard vor den DB-Traits, Flags in phpunit.xml gepinnt, Zustimmung an gezeigte Fassung gebunden (Umsetzungsaudit 25.09.: N22, N06, 5.3) 48129e9 2a2215b audit: Nacharbeit Umsetzungsaudit 25.09.2026 — Bildfreigabe, Beweisarchiv, KI-Atomarität, Berichte (Block 8, N01–N05, N07, N08, N10–N21, 5.1, 5.2) b80cce6 c38bceb dev: Entwicklungsplan Block 8 — Abgleich Umsetzungsaudit 25.09., Entscheidungen E10–E18, Live-Schritte, Protokoll 97cd8f9 c6543eb dev: Entscheidungen E10–E18 vom Betreiber bestätigt (25.09.2026) 21e8871 05cd604 dev: Bildkennzeichnung — Deploy 1, 2 und 2b am 28.09.2026 live, Protokoll 98c465b 80536ab dev: Bildkennzeichnung — Deploy 1b live (Formular v2 an, Testkonto geprüft), Precheck und Gate bleiben aus cf07723 1a11fb6 WIP-Schnappschuss vor Migration 2026-09-28 (uncommittete Änderungen von technik/betriebsfixes-2026-09) 1d417f8 1ccb4a8 auth/security: API-Firmenzuordnung nur für Mitglieder oder Allowlist, Google-Vorabübernahme geschlossen, gemeinsamer Login-Abschluss (Umsetzungsaudit 29.09.: R-01, K-04, K-07, K-08, B-10) c2e0b85 d6e49c1 web/seo: Änderungsdatum unabhängig von Aufrufen, EN-URLs in Sitemap und Legacy-API, signierte Bounce-Referenz, Merge/Canonical konsistent (Umsetzungsaudit 29.09.: R-02 bis R-11, N17, N18, OPT-1, OPT-2; 02.10.: O01) dfb0513 3dbc3fa tests: gemeinsamer Testhelfer, DB_URL-Guard vor RefreshDatabase, Larastan voller Scope ohne Meldung (Umsetzungsaudit 29.09.: Q-01, Q-02; 02.10.: O02) f0eeef0 c82f279 press-releases/jobs: Scheduler respektiert manuelle Prüfung und kommt an Blockaden vorbei, Newsletter-Versand per Schalter gesperrt, kurze Scheduler-Sperren (Umsetzungsaudit 29.09.: K-01, K-02, K-05, K-06, K-09, E9, OPT-8, OPT-9; 02.10.: O06) 5ec252d f1c0e27 images: nur freigegebene Bilder in Feed und PDF, versionierte Veröffentlichungssnapshots, Bestätigung an das gezeigte Bild gebunden, getrennte Rückhaltegründe (Umsetzungsaudit 29.09.: B-01 bis B-14, N09, OPT-3 bis OPT-5; 02.10.: O03) 7cd84b2 60650ba archive: Auftragstabelle statt Marker, exklusiver Abschluss, Quarantäne, Restore über Payload-Identität und signierte Exporte, Schlüsselrotation (Umsetzungsaudit 29.09.: A-01 bis A-15, OPT-6, 5.1 d; 02.10.: O04, O05, O07, O08) aa47e11 4a7e496 dev: Umsetzungsaudits 29.09. und 02.10., Entwicklungsplan Blöcke 9 und 10 mit bestätigten Entscheidungen E19–E34 und Deploy-Plan, Runbook ergänzt 2701588 448643b dev: Commit-Hashes der Blöcke 9 und 10 im Protokoll nachgetragen f2ed268 2079dfd deps: Composer-Update (Laravel 12.69.3, Livewire 4.4.7, Flux 2.20.1, Fortify 1.40.0), league/commonmark 2.10.3 behebt zwei Advisories; Sentry-SDKs für GlitchTip (sentry/sentry-laravel, @sentry/browser) 8769a71 d884eb7 monitoring: Betriebsüberwachung Phase 1 — GlitchTip (Server- und Browserfehler), Fehlersignale ohne Exception, /health mit Scheduler-Herzschlag, ntfy-Alarme, fehlgeschlagene Anmeldungen im Verlauf, Umami im Kundenbereich, Versionsnummer 22b62df 8690165 dev: Monitoring-Plan (Phasen 1–3, Entscheidungen M1–M9, Protokoll), Deploy-Checkliste v1.1.0, Runbook um Versionsdatei und Composer-Schritt ergänzt df7ebdc 9a05cb9 mcp: Context7-API-Schlüssel aus .mcp.json und .codex/config.toml entfernt — kommt jetzt aus CONTEXT7_API_KEY 33dc991 c837ef9 dev: Deploy-Checkliste v1.1.0 — Paket gebaut, Entwicklerdateien aus der Paketliste ausgenommen 8a64bd7 2dda9ec dev: Deploy-Checkliste — Server braucht kein Git b1cec16 984d001 chore: docs/ aus dem Repository — lebt im Obsidian-Vault (Devcontainer-Mount), Q-05 entschieden; entpackte Deploy-Pakete ignoriert cd18832 01d68c2 dev: Deploy v1.1.0 am 05.10.2026 live — Protokoll in Deploy-Checkliste, Entwicklungsplan (Blöcke 9/10) und Monitoring-Plan f288ab6 1d7ce9e dev: Roadmap — Volt entfernen und auf Livewire-4-Single-File-Components umstellen (Umfang, Schritte) 4ca099f dd688e5 dev: KAS-Passwort erledigt — SSH-Zugang des Altsystems geändert und deaktiviert, KAS-Hosting bleibt für die Postfächer 73da704 129de4f deploy: Git-Deploy per Tag — dev/betrieb/deploy.sh, Ablauf und einmalige Umstellung in git-deploy.md, Runbook §10; public/build wird versioniert e316734 168a1cd build: Assets für v1.1.1 2f02acc 17dceec tests: Testsuite meldet nicht mehr an GlitchTip — Sentry-DSNs in phpunit.xml geleert, Wächtertest; Produktions-Logs unter dev/ ignoriert 16af374 3fd3ac0 fix: Registrierung — Platzhalter serverseitig übersetzt statt als Alpine-Ausdruck (GlitchTip browser-pressekonto 15), Wächtertest; Promise-Ablehnungen mit Typ und Inhalt (10); vertippte artisan-Befehle nicht melden (server-pressekonto 9) a90f24a df557e4 search-console: vorübergehende Google-Fehler einmal wiederholt und nur als Warnung protokolliert, Portal-Abbruch nach fünf Fehlern in Folge, Zeitbudget 40 Minuten (GlitchTip server-pressekonto 11–14) 88b4feb 9e35c73 dev: GlitchTip-Dokumentation (dev/glitch-tip) — Überblick, Meldewege, API-Abruf, Ablauf zur Fehlerbehebung, Regeln, Protokoll der Einträge; Verweis in CLAUDE.md 072fd62 3a6cb6a dev: GlitchTip-Doku auf Git-Deploy umgestellt (Release-Datei schreibt deploy.sh) eb2bf0b 88f343d build: Assets für v1.1.2 92709d8 2a61122 fix: eigene Flux-Icons ins Repository — macOS-Muster "Icon" in der .gitignore traf bei core.ignorecase auch resources/views/flux/icon/ 79bb6cf 5782297 dev: Git-Deploy live seit v1.1.3 (06.10.2026) — Protokoll, Befunde der Umwandlung, Runbook §10 und GlitchTip-Doku angepasst 31da9ea 2cde728 livewire: Volt entfernt — Komponenten als Livewire-4-Single-File-Components, Route::livewire(), Livewire::test(); livewire/volt deinstalliert a5bf331 6d03d8d billing: Rechnungsversand — PDF im Anhang der Zahlungsmail, optionale Rechnungs-E-Mail, Stripe-Rechnungs-PDF direkt aus dem Kundenbereich debf094 da9411b dev: Deploy v1.2.0 (Volt entfernt) im Git-Deploy-Protokoll bc5e151 9f806de dev: Git-Deploy — FPM-Reload ohne Passwort getestet, PK_FPM_RELOAD ungesetzt lassen; Nginx-Fehlerlog ausgewertet, process_control_timeout bewusst nicht gesetzt 06e37c9 2c25eea dev: Monitoring-Plan — Nachtrag fehlgeschlagene Anmeldungen (Befund, Auswertung) und Einrichtung des externen Monitors (Uptime Kuma, ntfy, zweite Ebene) 0aaee12 05535aa auth: fehlgeschlagene Anmeldungen mit Einstieg (livewire/fortify/two-factor); unbekannte Adressen als Tageszähler statt Verlaufseintrag, Kachel im Systemstatus, Löschfrist 90 Tage ce6e8b4 c223daa deploy: Worker-Prüfung am Ende von deploy.sh — monitoring:queue-probe stellt einen Test-Job ein und wartet bis 60 s; ohne Worker Exit 3 mit Hinweis dfc7ed1 3b4448a dev: Worker-Ausfall 06.10. dokumentiert — Runbook ohne pauschales queue:retry all, Vorgehen bei stehendem Worker, externer Monitor erledigt (status.adametz.media) c385ad9 d083110 dev: Deploy v1.3.2 im Git-Deploy-Protokoll (Worker-Prüfung 4 s, Supervisor enabled) 2215826 32e1349 dev: Baukasten Git-Deploy und Betriebsüberwachung für andere Laravel-Projekte (dev/git-deploy-monitoring) — Anleitungen, Checkliste, Vorlagen für Laravel, deploy.sh und Monitoring-Server d1d2ab3 fd8dd74 ops: Lokale Datenbank gegen fremde Testläufe absichern — DB_* nicht mehr als Container-Umgebung, Agenten-Regel, Testdatenbank-Pflicht im Baukasten 1c07fcb bae8347 security: Sicherheitsaudit 07.10.2026 (S-01–S-06) behoben, Passkeys und Zweitfaktor-Pflicht für Admins 5dc3bf5 8045ef1 build: Assets für v1.4.0 c76e420 af72810 fix: Abgleich der Firmenrechte entzieht Bestandskonten ohne E-Mail-Bestätigung nicht mehr pauschal alle Rechte — memberships:resync-auto mit Probelauf und Notbremse 6eb7c08 f693226 dev: Deploy v1.4.0 und v1.4.1 im Git-Deploy-Protokoll, Release-Stand im Sicherheitsaudit und Entwicklungsplan 6d85d29 e77d9e7 feat: API-Zugang endet mit der Buchung, optionales Ablaufdatum für API-Tokens 7fa310f 3def447 security: Proxy-Vertrauen nur noch lokal, HSTS in Produktion, Tests ohne echte ntfy-Pushes 0048682 798ae75 dev: Deploy v1.5.0 im Git-Deploy-Protokoll 35a49cc 077e522 dev: Phase 4 im Sicherheits-Entwicklungsplan auf Stand v1.5.0/v1.6.0 c751d4e 5dfd622 security: Andere Geräte abmelden, IP-weites Login-Limit, dauerhafte Sperrmarke, Passwortregeln, CSP im Melde-Modus f92d1e0 9c4962f build: npm-Advisories für shell-quote und source-map-js behoben 6a86fa4 65086ca dev: Deploy v1.6.0 im Git-Deploy-Protokoll 28e78f5 75e206d dev: Imagick als Server-Voraussetzung, Wiedervorlage der Restpunkte im Sicherheits-Entwicklungsplan 69aaef4 b06f5a8 build: Assets für v1.6.1 87ad433 bbc2b60 fix: Imagick in der Betriebsüberwachung, Scanner-Anfragen an Livewire als 400, abgebrochene Alpine-Übergänge nicht mehr melden 43420f0 61f449f dev: Deploy v1.6.1 im Git-Deploy-Protokoll 64d53a5 010258a build: Assets für v1.7.0 9cb39b6 b3bcc43 dev: Entwicklungsplan Spamschutz, Wiedervorlage der Nacharbeiten nach dem Deploy beae7e2 06d2889 feat: Spamschutz für Kontakt-Widget und Registrierung mit Cloudflare Turnstile 70ed7d1 35fd2f6 dev: Deploy v1.7.0 im Git-Deploy-Protokoll, Spamschutz-Nacharbeiten erledigt 3376f01 8e3554b dev: Doku aufgeräumt, neue Roadmap als einzige Liste offener Punkte