<workflowRun _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by younex1</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmain _class='hudson.plugins.git.util.Build'><buildNumber>9</buildNumber><marked><SHA1>f182d455db3a8ce7361ae7d2e691c06efffe267b</SHA1><branch><SHA1>f182d455db3a8ce7361ae7d2e691c06efffe267b</SHA1><name>refs/remotes/origin/main</name></branch></marked><revision><SHA1>f182d455db3a8ce7361ae7d2e691c06efffe267b</SHA1><branch><SHA1>f182d455db3a8ce7361ae7d2e691c06efffe267b</SHA1><name>refs/remotes/origin/main</name></branch></revision></refsremotesoriginmain></buildsByBranchName><lastBuiltRevision><SHA1>f182d455db3a8ce7361ae7d2e691c06efffe267b</SHA1><branch><SHA1>f182d455db3a8ce7361ae7d2e691c06efffe267b</SHA1><name>refs/remotes/origin/main</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/blut24-landing.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'><environment><GIT_SHA>f182d45</GIT_SHA><RELEASE_DIR>/var/www/blut24.com/web/releases/9-f182d45</RELEASE_DIR><RELEASE_ID>9-f182d45</RELEASE_ID></environment></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://jenkins.younex.de/job/blut24-landing/9/artifact</artifactsUrl><changesUrl>https://jenkins.younex.de/job/blut24-landing/changes</changesUrl><displayUrl>https://jenkins.younex.de/job/blut24-landing/9/</displayUrl><testsUrl>https://jenkins.younex.de/job/blut24-landing/9/testReport</testsUrl></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'><restartEnabled>false</restartEnabled><restartableStage>Checkout</restartableStage><restartableStage>Guard: main only</restartableStage><restartableStage>Ship source to target</restartableStage><restartableStage>Build, health-check and swap</restartableStage><restartableStage>Smoke test</restartableStage></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'><node _class='org.jenkinsci.plugins.workflow.graph.FlowStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepStartNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepAtomNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.cps.nodes.StepEndNode'></node><node _class='org.jenkinsci.plugins.workflow.graph.FlowEndNode'></node></action><action></action><action></action><action></action><building>false</building><displayName>#9 f182d45</displayName><duration>26078</duration><estimatedDuration>28038</estimatedDuration><fullDisplayName>blut24-landing #9 f182d45</fullDisplayName><id>9</id><keepLog>false</keepLog><number>9</number><queueId>5459</queueId><result>SUCCESS</result><timestamp>1785232906182</timestamp><url>https://jenkins.younex.de/job/blut24-landing/9/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>server/utils/mail.ts</affectedPath><affectedPath>server/api/registration/submit.post.ts</affectedPath><affectedPath>app/components/RegistrationForm.vue</affectedPath><affectedPath>server/utils/registrationValidation.ts</affectedPath><commitId>f182d455db3a8ce7361ae7d2e691c06efffe267b</commitId><timestamp>1785232895000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@logyou.de</authorEmail><comment>registration: switching type must not carry the other branch's data

Reported from real use: pick a clinic, switch to "Kurierdienst", register — and
the confirmation mail arrived as "Medizinischer Kurierdienst / Einrichtung:
Facharztklinik Hamburg / Anschrift: Martinistraße 78". There was no watcher on
form.type at all, so stoid/orgName/street/plz/city kept the clinic's values and
the courier branch submits those fields verbatim. Switching type now clears the
clinic selection, the address fields and the related errors.

Couriers may register with any address, freemail included — they are not tied to
a clinic domain and every courier registration is reviewed manually anyway. The
block stays for clinics, where the domain is what proves the registrant belongs
to the Standort they picked. Enforced on the server too, not just in the form.

The confirmation mail is now written per type: a courier is not a clinic, so it
gets its own description (orders on the phone, confirm pickup/delivery in the
app, free, manual review) and the detail row reads "Unternehmen" rather than
"Einrichtung". Both the HTML and the plain-text alternative.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-28 12:01:35 +0200</date><id>f182d455db3a8ce7361ae7d2e691c06efffe267b</id><msg>registration: switching type must not carry the other branch's data</msg><path><editType>edit</editType><file>server/api/registration/submit.post.ts</file></path><path><editType>edit</editType><file>server/utils/mail.ts</file></path><path><editType>edit</editType><file>app/components/RegistrationForm.vue</file></path><path><editType>edit</editType><file>server/utils/registrationValidation.ts</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName><id>info</id></culprit><inProgress>false</inProgress><nextBuild><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by younex1</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmain _class='hudson.plugins.git.util.Build'><buildNumber>10</buildNumber><marked><SHA1>a5ea20018abc28385336941df5780f7d1753e72e</SHA1><branch><SHA1>a5ea20018abc28385336941df5780f7d1753e72e</SHA1><name>refs/remotes/origin/main</name></branch></marked><revision><SHA1>a5ea20018abc28385336941df5780f7d1753e72e</SHA1><branch><SHA1>a5ea20018abc28385336941df5780f7d1753e72e</SHA1><name>refs/remotes/origin/main</name></branch></revision></refsremotesoriginmain></buildsByBranchName><lastBuiltRevision><SHA1>a5ea20018abc28385336941df5780f7d1753e72e</SHA1><branch><SHA1>a5ea20018abc28385336941df5780f7d1753e72e</SHA1><name>refs/remotes/origin/main</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/blut24-landing.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><action></action><building>false</building><displayName>#10 a5ea200</displayName><duration>26200</duration><estimatedDuration>28038</estimatedDuration><fullDisplayName>blut24-landing #10 a5ea200</fullDisplayName><id>10</id><keepLog>false</keepLog><number>10</number><queueId>5461</queueId><result>SUCCESS</result><timestamp>1785232956187</timestamp><url>https://jenkins.younex.de/job/blut24-landing/10/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>scripts/test-registration.mjs</affectedPath><commitId>a5ea20018abc28385336941df5780f7d1753e72e</commitId><timestamp>1785232944000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@logyou.de</authorEmail><comment>test: courier freemail is now accepted, not rejected

The suite still asserted the old rule and failed on the previous commit — I
pushed without reading the result. The assertion now matches the intended
behaviour and explains why, so it does not read as a weakened check: couriers are
not tied to a clinic domain and are reviewed manually, while the freemail block
for clinics is asserted separately and unchanged.

38 checks, 0 failures.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-28 12:02:24 +0200</date><id>a5ea20018abc28385336941df5780f7d1753e72e</id><msg>test: courier freemail is now accepted, not rejected</msg><path><editType>edit</editType><file>scripts/test-registration.mjs</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit><inProgress>false</inProgress><nextBuild><number>11</number><url>https://jenkins.younex.de/job/blut24-landing/11/</url></nextBuild><previousBuild><number>9</number><url>https://jenkins.younex.de/job/blut24-landing/9/</url></previousBuild></nextBuild><previousBuild><action _class='hudson.model.CauseAction'><cause _class='com.cloudbees.jenkins.GitHubPushCause'><shortDescription>Started by GitHub push by younex1</shortDescription></cause></action><action></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmain _class='hudson.plugins.git.util.Build'><buildNumber>8</buildNumber><marked><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><branch><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><name>refs/remotes/origin/main</name></branch></marked><revision><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><branch><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><name>refs/remotes/origin/main</name></branch></revision></refsremotesoriginmain></buildsByBranchName><lastBuiltRevision><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><branch><SHA1>b1a7c4026f44521453558a428303a0537697beda</SHA1><name>refs/remotes/origin/main</name></branch></lastBuiltRevision><remoteUrl>https://github.com/younex1/blut24-landing.git</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><action></action><building>false</building><displayName>#8 b1a7c40</displayName><duration>26057</duration><estimatedDuration>28038</estimatedDuration><fullDisplayName>blut24-landing #8 b1a7c40</fullDisplayName><id>8</id><keepLog>false</keepLog><number>8</number><queueId>5457</queueId><result>SUCCESS</result><timestamp>1785232726165</timestamp><url>https://jenkins.younex.de/job/blut24-landing/8/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>.env.example</affectedPath><affectedPath>app/components/RegistrationForm.vue</affectedPath><affectedPath>nuxt.config.ts</affectedPath><commitId>b1a7c4026f44521453558a428303a0537697beda</commitId><timestamp>1785232713000</timestamp><author><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></author><authorEmail>info@logyou.de</authorEmail><comment>registration: the FORM also has to know about the test domains

A whitelisted address was still rejected with "Die Domain gehört nicht zu …".
The server accepted it — I had only ever tested the server with curl, which
bypasses the form entirely. The browser does its own domain check for instant
feedback and knew nothing about REGISTRATION_TEST_DOMAINS, so it blocked the
submit before the request was ever sent. Verified the wrong layer, missed the bug.

The list is now mirrored into runtimeConfig.public and consulted by both the
submit guard and the blur handler. Publishing it is acceptable: it is a temporary
operator feature (empty in real production) and a bypassed registration still has
to confirm a mail delivered to that domain, so knowing the name grants nothing.

The blur notice does NOT claim the domain "matches the Standort" — that would be
untrue. It says it is a test domain and that the registration is flagged for
manual approval.

Note the two-name trap, documented in .env.example: REGISTRATION_TEST_DOMAINS is
read server-side, NUXT_PUBLIC_REGISTRATION_TEST_DOMAINS by the browser. Set both
or the form and the server disagree — which is exactly this bug.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
</comment><date>2026-07-28 11:58:33 +0200</date><id>b1a7c4026f44521453558a428303a0537697beda</id><msg>registration: the FORM also has to know about the test domains</msg><path><editType>edit</editType><file>app/components/RegistrationForm.vue</file></path><path><editType>edit</editType><file>nuxt.config.ts</file></path><path><editType>edit</editType><file>.env.example</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.younex.de/user/info</absoluteUrl><fullName>info</fullName></culprit><inProgress>false</inProgress><nextBuild><number>9</number><url>https://jenkins.younex.de/job/blut24-landing/9/</url></nextBuild><previousBuild><number>7</number><url>https://jenkins.younex.de/job/blut24-landing/7/</url></previousBuild></previousBuild></workflowRun>