# 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: <x-portal.pr-presubmit-check> 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): <x-portal.page-header> + 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: <x-portal.empty-state> + admin/press-releases/index umgestellt
8690425 1c75e61 5.4: empty-state auf customer/press-releases + customer/press-kits ausgerollt
9ee77c8 505852f 5.4: <x-portal.table-pagination> + 13 Wrapper ersetzt
c829624 587d1fd 5.5: <x-portal.alert> + 6 Flash-Bloecke umgestellt
fc91f29 b1b832d 5.5: <x-session-status> + 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: <x-password-input> + 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
