Projektportal Neos-Paritaet: Zielbild, Ausgangsvertraege und Tests
Zielbild fuer volle Paritaet zwischen Legacy-Neos und Drupal-Projektportal. Die Seite dokumentiert, welche Daten Neos wirklich nach aussen gesendet hat, was Drupal aktuell sendet, wo bewusste Ersatzvertraege entschieden werden muessen und welche automatisierten Tests bzw. manuellen Pruefschritte bis zur Paritaet fehlen.
1. Definition: Was Paritaet spaeter bedeuten muss
Volle Paritaet ist kein reiner Seitenvergleich. Entscheidend sind die ausgehenden Datenvertraege: Mails, API-Calls, Feed-Dateien, Dateiablagen, Token-Links, Cron-Jobs, Importformate und Empfaenger. Ein Flow gilt erst als paritaetisch, wenn er fachlich erreichbar ist, sein ausgehender Vertrag dokumentiert ist und mindestens ein automatisierter Test den Vertrag absichert.
| Paritaetsbaustein | Definition of Done | Beispiel |
|---|---|---|
| Journey | Route/Form/Token/Redirect existiert, ist fuer Zielpersona erreichbar und hat Browser- oder Functional-Test. | /projektportal/verfuegbarkeit?hash=... darf nicht 404 sein. |
| Ausgangsvertrag | Empfaenger, Subject/Header, Body/Payload, Attachments, Dateiformat und Fallbacks sind dokumentiert und getestet. | Bewerbungsmail an bewerbung@solcom.de plus CC, PPP-ID, Session, Datei. |
| Ersatzvertrag | Wenn Drupal bewusst anders sendet als Neos, ist die Abweichung entschieden und als neuer Vertrag getestet. | Power-App-Plaintext statt Neos-HTML fuer RSM-Bewerbung. |
| Externe Integration | Mock-Vertragstest plus separater Smoke-/Sandbox-Check, sofern Credentials/Endpoint existieren. | Personio Application JSON, Mailingwork DOI, Salesforce URL-Writeback. |
| Manuelle Abnahme | Konkrete Pruefschritte mit Beleg: Mailpit, DB-Zeile, HTTP-Response, Datei, Screenshot oder Video. | Suchagent-Cron erzeugt Mail mit Projektlink und korrektem Verwaltungslink. |
2. Ausgangsvertraege: Neos vs. Drupal-Ist
| Flow | Neos-Vertrag | Drupal-Ist | Paritaets-GAP | Zieltest |
|---|---|---|---|---|
| Projektbewerbung |
HTML-Mail Application.html; To bewerbung@solcom.de, CC Projektkontakt,
From no-reply@solcom.de als SOLCOM Projektportal. Betreff ist standardmaessig
Bewerbung ueber Projektportal / Projekt-Nummer: ...; UTM-Quelle oder Kampagne kann den Kanal im
Betreff ersetzen. Uploads laufen ueber /api/uploadtempfile, MIME pdf/doc/docx,
1 KB bis 5 MB, maximal 4 Dokumente. Archiv unter
Data/Bewerbungen/YYYY-MM-DD/YYYY-MM-DD_H-i-s_bewerbung/ mit bewerbung.html und
Unterlagen/. Bewerber-ACK ApplicationConfirmation.html geht an Bewerberadresse,
BCC bewerbung@solcom.de, Subject Eingangsbestaetigung / Projekt-Nummer: ....
|
RSM-Webform sendet text/plain Power-App-Zeilenformat an bewerbung@solcom.de, CC Kontakt,
From SOLCOM Projektportal <no-reply@solcom.de>; CV oder Profil-Dokument als Attachment;
Apply-all sendet Mail pro Projekt.
|
mittel Bewerber-ACK fehlt; Archiv-Datei fehlt; UTM-Betreffprioritaet ist nicht belegt; Plaintext ist Ersatzvertrag, nicht Neos-HTML. | Kernel-Golden-Master fuer Zeilenformat, UTM-Betreff und Attachments + Browser-Full-Submit + Mailpit-ACK-Test oder Out-of-scope-Entscheidung. |
| Projekt Alert / Suchagent |
Ein Neos-Modell fuer User/Gast. Neue Alerts starten inaktiv und senden DOI-Mail
Anmeldebestaetigung - SOLCOM Projekt Alert mit Hash-Aktivierung. Cron sendet nur neue
Projektbenachrichtigungen; ProjectAlertNotification verhindert erneuten Versand desselben Projekts
je Alert. Import legt Notifications fuer vorhandene Projekte an, damit Altdaten nicht sofort verschickt werden.
Mail SOLCOM Projekt Alert kommt von no-reply@solcom.de, Signatur
projektalert@solcom.de, Hash-Link fuer Abmeldung. Include-Tags bilden AND-Gruppen, Gruppen werden
OR-verknuepft; NoTags schliessen Treffer aus; Gebiete enthalten D0 bis D9.
|
Zwei Modelle: eingeloggter ppp_alert mit Easy Email ppp_alert; oeffentlicher
project_offer_alert mit DOI/Digest via MailManager, Token-Unsubscribe und Cleanup unbestaetigter
Alerts nach 7 Tagen. Aktive ppp_alert-Config verlinkt noch auf /mein-profil/suchagent.
|
mittel Modell-Split ist moeglich, aber muss entschieden werden; Link-Drift ist echter Bug. | Config-Test gegen /projektportal/suchagent; Cron-E2E mit Matching-Projekt und Dedupe; Public Subscribe → Confirm → Digest → Unsubscribe. |
| Availability / Verfuegbarkeit |
XML/CSV-Import erzeugt Availability-Datensaetze mit PersonalNr, Projektpartner, Mailtyp, E-Mail,
Anredezeile, Mitarbeiter, Bearbeiter, Status und Hash. Command sendet vier Einladungstypen mit eigenen Subjects:
Ihr Profil fuer unsere Projekte, Ihr Mitarbeiterprofil fuer unsere Projekte,
Sind Sie bald verfuegbar?, Ist Ihr Mitarbeiter bald verfuegbar?. Formular per Hash
sendet bei Status 1 HTML-Mail an projektpartner@solcom.de, From no-reply@solcom.de,
Subject Aktualisierung RMS Nr. ... / Verfuegbar ab: .... Body enthaelt RMS-Nummer, Name,
Datum, Nachricht, Datenschutz, Versandzeit, Session-ID, Mailtyp und PPP-ID. Archiv unter
Data/Verfuegbarkeit/YYYY-MM-DD/YYYY-MM-DD_H-i-s_verfuegbarkeit/ mit verfuegbarkeit.html
und Uploads. ACK Eingangsbestaetigung geht an Partneradresse.
|
Profilfeld field_availability und importierte neos_avail_*-Templates existieren.
Keine Route, kein Token, kein Formular, kein Import-/Sendprozess fuer Availability-Journey.
|
gross Kompletter Neos-Journey fehlt, falls Zielbild volle Paritaet ist. | Neues Modul/Slice mit Token-Route, Import-Fixture, vier Einladungstypen, Submit-Mail, ACK-Mail, Upload-Archiv, Cleanup und Access-Tests. |
| Mailingwork / Magazin |
Form-encoded HTTP POST an https://login.mailingwork.de/webservice/webservice/json/*.
Funktionen isemailinlist, optinrecipient; Felder 1 Titel, 3 Nachname, 4 Vorname,
11 E-Mail; listId und optinSetupId aus Neos-Settings; Credentials duerfen nicht in
Doku- oder Testdaten kopiert werden.
|
Lokale Felder field_newsletter_opt_in am User und newsletter am oeffentlichen Alert.
Keine aktive Mailingwork- oder Marketing-DOI-Anbindung im geprueften Custom-Code.
|
mittel Externe DOI fehlt; Provider/Scope/Credentials muessen entschieden werden. | API-Client-Mocktest fuer Mailingwork oder bewusster Ersatz durch neues Marketing-System. |
| Registrierung / Verify / Welcome | Registrierung aus Bewerbung oder Portal erzeugt Account, sendet Aktivierung/Confirm-Mail; Neos nutzte RMS-/PPP-Kontext und optionale Magazin-Anmeldung. |
Webform erzeugt gesperrten User, projektpartner-Profil und private Dokumente; Easy Email
ppp_verify und ppp_welcome; DOI und One-Time-Login vorhanden.
|
mittel Neue Selbstregistrierer erhalten keine belegte PPP-ID; externe Magazin-Anbindung fehlt. | Registration-Test muss field_ppp_id-Regel pruefen, sobald Quelle/Sequenz entschieden ist. |
| Profil-Sync | Legacy-Profil-/RMS-Kontext war externer Integrationsvertrag; genaue aktuelle Ziel-API ist fachlich zu klaeren. | Drupal vergleicht editierbare Profilfelder und queued Easy Email ppp_sf_sync an vertrieb@solcom.de. |
mittel Mail-Fallback ist kein API-Sync. Als Ersatzvertrag akzeptieren oder Salesforce/RMS-API bauen. | Entweder Mail-Golden-Master behalten oder Salesforce-Client-Vertragstest ergaenzen. |
| Account-E-Mail-Wechsel | Double-Opt-In fuer neue E-Mail-Adresse. | Neue Adresse wird geparkt; Confirm-Link per HMAC/KeyValue; Easy Email ppp_email_change. |
klein Aktueller Code matcht Ziel. | Bestehende Kernel-/Functional-Tests behalten; Link-Expiry pruefen. |
| Account-Loeschung | Neos-Templates neos_acc_delete* existieren fuer Loeschkontext. |
Drupal loescht User, Profil, Dateien und Directory; keine aktive Ausgangsmail gefunden. | entscheidung Falls Neos-Mail fachlich relevant war, fehlt Ausgangsvertrag. Sonst als bewusst entfernt dokumentieren. | Deletion-Test um Mail-Erwartung erweitern oder explizit kein Mailversand als Vertrag testen. |
| Vendor-Feeds | Externe Plattformen erhalten Projektangebote mit Detail-/Apply-Links. |
Public GET fuer Freelancermap/freelance.de als XML openPositions, Gulp als HTML-Legacy;
Eligibility via published, Channel-Flag, Publish-Window. minggo_workspace_id ist leer, dadurch
fehlt jobApplicationURL.
|
klein/unklar Viele Tests vorhanden; voller Neos-Sample-Diff und Minggo-URL-Entscheidung fehlen. | Golden-Sample pro Vendor + Live-HTTP-Headers + Legacy-Redirects + Minggo-Apply-URL, wenn Workspace gesetzt. |
3. Personio-Kompatibilitaet
Personio ist am naechsten an echter Vertragstreue: Endpoints, Header, Top-Level-Body und Kernattribute matchen. Die Rest-GAPs sitzen nicht im Grund-POST, sondern in Randformaten: Legacy-Cookie-Format, App-Referer-Kanal, Upload-Typen.
| Aspekt | Neos | Drupal | GAP/Test |
|---|---|---|---|
| Endpoints | /v1/recruiting/applications/documents multipart, danach /v1/recruiting/applications JSON. |
Gleiche Endpoints; Application-POST mit zusaetzlichem X-Idempotency-Key. |
match Header-/Endpoint-Test behalten. |
| Application JSON | job_position_id, first_name, last_name, email, application_date, attributes, files. |
Gleicher Body; application_date aus Submission-Zeit, retry-stabil. |
match Golden-Master-Payloadtest. |
| Gender | m/w/d zu male/female/diverse, sonst undefined. |
Aktueller Drupal-Code sendet die rohen Webform-Werte m/w/d/u. |
gap Mapping-Fix plus Kernel-Test fuer alle vier Werte. |
| Referer | info-Cookie als JSON mit url_full = base64(referer); >252 Zeichen wird gekuerzt und lowercased. |
info-Cookie raw base64(referer), Klaro-gated; keine belegte Neos-Langwert-Normalisierung im aktuellen Code. |
teilweise Legacy-JSON-Cookie-Test, Langwert-Normalisierung oder bewusste Abweichung dokumentieren. |
| Channel | Grosse Domain-Tabelle, last-match-wins, android-app/ios-app-Spezialfall. |
Domain-Tabelle vorhanden; App-Spezialfall nicht belegt. | klein Unit-Test fuer App-Referer und gesamte Domain-Tabelle. |
| Upload-Kategorien | cv, cover-letter, certificate, sonst other. |
cv, cover-letter, weitere Anhaenge other; kein eigenes Arbeitszeugnis-Feld. |
mittel Feld-/Kategorie-Entscheidung fuer certificate. |
| Applicant Confirmation | Im Career-Personio-Flow kein lokaler Mailversand gefunden; Redirect nach Personio-Erfolg. | Thank-you sagt, Personio sendet Bestaetigung; kein lokaler Applicant-Mailversand. | match Test soll explizit keine lokale Mail erwarten. |
4. Testzielbild: P0/P1/P2
| Prioritaet | Test | Warum | Automatisierung |
|---|---|---|---|
| P0 Availability Journey | Token-Route, Import-Fixture, Formular-Submit, Mail an projektpartner@solcom.de, ACK an Partner, Upload-Archiv. |
Groesster kompletter Neos-GAP. | Functional + Kernel + Mailpit/Browser-Pruefschritt. |
| P0 PPP-ID-Neuvergabe | Registrierung erzeugt fachlich korrekte field_ppp_id oder dokumentierten Ersatzwert. |
Neue Bewerbungen ohne PPP-ID brechen externe Zuordnung. | Kernel/Functional, sobald Regel entschieden ist. |
| P0 Bewerber-ACK Projektbewerbung | Projektbewerbung erzeugt interne Mail und Bewerber-ACK oder dokumentiert explizit keinen ACK. | Neos sendete ApplicationConfirmation.html; Drupal aktuell nicht. |
Kernel-Mailtest + Browser-Full-Submit. |
| P0 Projektbewerbung Ausgangsvertrag | Eine SOLCOM-Mail pro Projekt, Projektkontakt-CC, UTM-Betreffprioritaet, Body-Felder, Dateiliste, Attachments und optionales Archiv. | Neos-Vertrag ist breiter als aktueller Teilstring-Test und umfasst UTM, Uploadlimits und Archivpfad. | Kernel-Golden-Master + Browser-Submit + Mailpit. |
| P0 Suchagent-Link-Drift | Config-Sync und aktive Config duerfen nicht mehr /mein-profil/suchagent enthalten. |
User landet sonst auf altem Pfad. | Kernel/Config-Test + Mailbody-Test. |
| P1 Personio Golden Master | Kompletter Application-JSON, Header, Dokument-Upload-Reihenfolge, Referer, Channel, Upload-Kategorien. | Externer API-Vertrag muss regressionssicher sein. | Kernel mit Guzzle MockHandler + optional Sandbox-Smoke. |
| P1 Suchagent Cron E2E | Alert speichern, passendes Projekt erzeugen, Cron ausloesen, Mail mit Projektlink und Verwaltungslink pruefen; danach gleicher Projekt-Treffer darf nicht erneut gesendet werden. | Neos hatte Notification-Dedupe und Import-Baseline gegen Massenversand. | Kernel/Functional, optional Browser fuer UI. |
| P1 Oeffentlicher Projekt Alert | Subscribe → Confirm → Digest → Unsubscribe mit Token und Cleanup nach 7 Tagen. | Neos konnte Gast-Alerts; Drupal hat eigenes anonymes Modell. | Functional + Kernel. |
| P1 Mailingwork/Newsletter | Provider-Client oder Ersatzentscheidung; Duplicate-Check, optinrecipient-Feldmapping und Fehlerfaelle der JSON-API pruefen. |
Lokale Opt-ins sind keine Neos-Paritaet. | Mock-Vertragstest nach Providerentscheidung. |
| P1 Neos-Template-Matrix | Alle importierten neos_*-Easy-Email-Templates als verwendet, ersetzt oder tot markieren. |
Aktuell liegen viele Templates in Config, ohne aktiven Trigger. | Config-/Service-Inventar + Report-Gate. |
| P2 Feed-Sample-Diff | Freelancermap, freelance.de, Gulp plus Legacy-Redirects gegen Golden Samples. | Feeds sind nah dran, aber Vendor-Format muss stabil bleiben. | Kernel + HTTP route tests. |
| P2 Visuelle Portal-Regressions | Profil, Konto, Merkliste, Suchagent, Bewerbung, Registrierung via Browser und a11y Smoke. | Paritaet muss auch bedienbar bleiben. | agent-browser fuer Browser-Evidence. |
5. Konkrete Pruefschritte fuer spaetere Abnahme
| Flow | Schritte | Erwarteter Beleg | Automatisierbar |
|---|---|---|---|
| Registrierung | /projektportal/registrieren ausfuellen, Datei hochladen, Verify-Link aus Mailpit klicken. |
User aktiv, Rolle projektpartner, Profil + Datei, Verify und Welcome-Mail. |
Ja. |
| PPP-ID | Neuen Selbstregistrierer anlegen, danach Bewerbung absenden. | field_ppp_id gesetzt oder bewusst dokumentierter Ersatz; Mailbody enthaelt erwarteten Wert. |
Ja nach Regelentscheidung. |
| Login / Profil | Mit E-Mail einloggen, Profil bearbeiten, Datei pruefen. | Profilwerte gespeichert, private Datei nur fuer Owner erreichbar, kein Admin-Chrome fuer Endnutzer. | Ja. |
| E-Mail-Wechsel | Neue Adresse setzen, Confirm-Link klicken, erneut anmelden. | Alte Adresse bleibt bis Confirm aktiv; neue Adresse danach aktiv; Pending-Key entfernt. | Ja. |
| Merkliste | Anonym Projekt merken, einloggen, Merkliste oeffnen, Eintrag entfernen. | Persistente Merkliste, CSRF-geschuetzte JSON-Aktionen, Server-Storage pro User. | Ja. |
| Projektbewerbung | Projekt-Detail → Bewerben → Upload → Submit; zusaetzlich UTM-Kontext und mehrere Projekte pruefen. | Danke-Seite, Webform-Submission, interne Mail an bewerbung@solcom.de, CC Kontakt, korrekter UTM-/Standard-Betreff, Dateiliste, Bewerber-ACK oder dokumentierter Nichtversand. |
Ja. |
| Apply-all | Zwei Projekte merken, /projektportal/merkliste/bewerben absenden. |
Eine Mail pro Projekt, korrektes Subject/CC, Merkliste danach leer. | Ja. |
| Suchagent | Skill/Region speichern, passendes Projekt nach Baseline erzeugen, Cron zweimal ausloesen. | Erster Lauf sendet Mailpit-Mail mit Projektlink und Link auf /projektportal/suchagent; zweiter Lauf sendet denselben Treffer nicht erneut. |
Ja. |
| Oeffentlicher Projekt Alert | Gast-Subscribe, Confirm-Link, Digest-Cron, Unsubscribe-Link. | Unconfirmed Cleanup nach 7 Tagen, Digest nur confirmed, Token-Unsubscribe loescht Entity. | Ja. |
| Availability | Import-Fixture laden, Hash-Link oeffnen, Datum/Message/Upload senden; Upload-MIME und Dateigroesse negativ testen. | Aktuell 404. Ziel: Einladung je Mailtyp, Mail an projektpartner@solcom.de, ACK an Partner, Archiv-Dateien, Uploadvalidierung. |
Ja nach Implementierung. |
| Personio | Vacancy-Bewerbung mit Referer, Gender, Talentpool, Dokumenten absenden; Queue verarbeiten. | Mock/Sandbox zeigt JSON und Dokument-Refs im Neos-kompatiblen Format; kein lokaler Applicant-Mailversand. | Ja, Sandbox optional. |
| Feeds | /feeds/freelancermap.xml, /feeds/freelance.xml, Gulp-Legacy-URL abrufen. |
HTTP 200/301, erwartete XML/HTML-Struktur, Items, Canonical/Apply-Links, Cache-Tags. | Ja. |
6. Entscheidungen, bevor Full-Parity gebaut wird
- Power-App statt Neos-HTML: Soll RSM-Bewerbung dauerhaft das Plaintext-Power-App-Format sein? Dann Neos-HTML-Archiv nicht bauen, sondern Ersatzvertrag offiziell machen.
- Bewerber-ACK: Muss Drupal wie Neos eine Bestaetigungsmail fuer Projektbewerbungen senden, oder reicht Danke-Seite/Minggo?
- Archivpflicht: Muessen
Data/BewerbungenundData/Verfuegbarkeitals Dateiarchive in Drupal nachgebaut werden, oder reicht Webform-/Entity-Speicherung? - PPP-ID-Quelle: Kommt neue PPP-ID aus RMS/Salesforce, lokaler Sequenz oder bewusstem UUID-Ersatz?
- Availability-Scope: Vollstaendiger Neos-Hash-Link-Flow in MVP oder Phase 2? Ohne Entscheidung bleibt groesster GAP offen.
- Legacy-Import-Samples: Fuer Project-Alert-CSV und Availability-XML/CSV fehlen belastbare Export-Samples. Ohne Samples bleiben Feldindizes und Sonderfaelle unsicher.
- Alert-Modell: Zwei Drupal-Modelle akzeptieren oder oeffentlichen und eingeloggten Alert naeher an Neos zusammenfuehren?
- Newsletter/Mailingwork: Mailingwork reaktivieren, durch neues Marketing-System ersetzen oder lokale Opt-ins als Zielzustand definieren?
- Profil-Sync: Mail an Vertrieb als finaler Ersatzvertrag oder echter Salesforce/RMS-API-Sync?
- Personio Upload-Typen: Eigenes Arbeitszeugnis-Feld fuer
certificateoder alle Zusatzdokumente bewusstother?
7. Screenshot-Vergleich: Formularinventar
Screenshots sollen pro Formularpaar einzeln entstehen, damit spaeter klar ist, welcher ProPal-Stand gegen welchen
Neos-Stand geprueft wurde. Produktion https://www.solcom.de/de/projektportal/registrieren blockierte
die Agent-Browser-Session und den integrierten Browser am 19.06.2026 mit Cloudflare-Human-Check. Auto-Connect
lieferte keine eingeloggte User-Chrome-Session fuer solcom.de. Echte Neos-Produktionsscreenshots
brauchen daher eine geloeste Challenge in der sichtbaren Browser-Session, eine verbundene Chrome-Session mit
Remote-Debugging oder eine lokale Cookie-State-Datei. Bis dahin koennen ProPal-Screenshots und statische
Legacy-Template-Referenzen vorbereitet werden.
| Formular | ProPal Screenshot | Neos Screenshot | Status / naechster Schritt |
|---|---|---|---|
| Registrierung | Fullpage, annotiert | Agent-Browser-Blocker, In-App-Browser-Blocker | teilweise Neos-Produktion erst nach Auth-/Cloudflare-Zugriff erfassbar. |
| Login | offen | offen | Als naechster einzelner Screenshot-Block abarbeiten. |
| Passwort-Reset | offen | offen | Nach Login-Block erfassen. |
| Profil bearbeiten | offen | offen | ProPal braucht authentifizierten Projektpartner-Testuser; Neos braucht Produktionssession. |
| Konto / Zugangsdaten | offen | offen | Nur mit Testuser; keine produktiven Aenderungen absenden. |
| Suchagent / Projekt Alert eingeloggter Partner | offen | offen | Mit Testprojekt und Testuser aufnehmen; Cron-Mail separat testen. |
| Oeffentlicher Projekt Alert | offen | offen | Public-Formular zuerst lokal aufnehmen, danach Neos bei Zugriff. |
| Projektbewerbung | offen | offen | ProPal-Projektangebot mit Bewerbungsroute waehlen; Submit erst in Test-/DDEV-Kontext. |
| Availability | fehlt | offen | ProPal ist 404 bis Implementation; Neos braucht gueltigen Hash oder statische Template-Referenz. |
8. Quellen und Evidenz
- Legacy-Neos Projektbewerbung:
temp/web54_extracted/web/neos/DistributionPackages/Contenance.Solcom/Classes/Controller/ProjectController.php,Resources/Private/Templates/Mail/Application.html,ApplicationConfirmation.html. - Legacy-Neos Uploads/Cleanup:
Classes/Controller/ApiController.php,Classes/Domain/Service/UploadService.php,Classes/Command/UtilityCommandController.php. - Legacy-Neos Availability:
Classes/Command/AvailabilityCommandController.php,Classes/Controller/AvailabilityController.php,Resources/Private/Templates/Mail/Availability/*. - Legacy-Neos Project Alert:
Classes/Command/ProjectAlertCommandController.php,Classes/Domain/Service/ProjectAlertService.php,Resources/Private/Templates/Mail/ProjectAlert/ProjectAlert.html. - Legacy-Neos Mailingwork:
Classes/Domain/Service/MailingworkService.php. - Legacy-Neos Personio:
Classes/Controller/CareerPersonioController.php,Classes/Domain/Service/Career/PersonioService.php. - Drupal Projektbewerbung:
web/modules/custom/solcom_project_offer/src/Plugin/WebformHandler/RsmProjectOfferMailHandler.php. - Drupal Projekt Alert/Suchagent:
web/modules/custom/solcom_project_offer/modules/solcom_project_offer_alert/undweb/modules/custom/solcom_projektpartner_alert/. - Drupal Projektpartner:
web/modules/custom/solcom_projektpartner/,web/modules/custom/solcom_user/, relevanteconfig/sync/easy_email.*. - Drupal Personio:
web/modules/custom/solcom_vacancy_application/,config/sync/webform.webform.vacancy_application.yml. - Subagent-Slices: Legacy-Neos-Vertraege, Drupal-Ist-Vertraege, Personio-Kompatibilitaet und Testinventar wurden read-only ausgewertet; Legacy-Neos wurde zusaetzlich direkt im Hauptthread quellenbasiert gelesen.