Skip to content

Reduce onboarding and submission friction#698

Open
nopara73 wants to merge 187 commits into
masterfrom
codex/reduce-onboarding-submission-friction
Open

Reduce onboarding and submission friction#698
nopara73 wants to merge 187 commits into
masterfrom
codex/reduce-onboarding-submission-friction

Conversation

@nopara73

@nopara73 nopara73 commented Jun 20, 2026

Copy link
Copy Markdown
Owner

What changed

Latest batch:

  • Client-side contact email normalization now ignores non-string values before trimming.
  • Full application, result upload, and edit-profile pages use the guard so malformed stored or athlete metadata cannot throw during submission.
  • Page tests pin the non-string guard across the affected submission flows.

Earlier batches in this PR reduced onboarding and submission friction by hardening duplicate-submit guards, proof/profile image upload recovery, storage handoffs, contact email reuse, payment handoffs, validation feedback, application-stage listener registration, calculator step reset after handoff, bioage handoff capture for filled fields, athlete picker display-name matching, display-name-aware application duplicate checks, final application identity revalidation, proof-file format screening, profile-picture format screening, proof picker filtering, contact email normalization, partial bioage handoff cleanup, existing-athlete payment-offer storage, first-time join payment-offer storage, partial bioage update submission, stored review-invoice recovery, stored birthday validation, stored biomarker-date presence, stored birthday range validation, stored biomarker-date range validation, stored biomarker value validation, boolean biomarker value rejection, structured biomarker value rejection, blank proof-entry handling, full-application contact email normalization, null biomarker-row validation, minimized interview-request email exposure, Challenge email-link normalization, optional www. personal-link normalization, blank selected-athlete handoff recovery, full-application bootstrap fetch fallbacks, edit-profile athlete-fetch fallback, malformed bioage handoff cleanup, payment-offer shape validation, strict selected-athlete submit guards, over-limit proof-batch recovery, mixed proof-file selection recovery, edit-profile Enter-key submission, stored age-difference sanitization, and exact-match athlete selection on Enter.

Why it matters

Applicants and returning athletes are less likely to get stuck by bad handoff metadata or unexpected athlete contact fields while submitting application, result, or edit requests.

Verification

  • dotnet test LongevityWorldCup.Tests\LongevityWorldCup.Tests.csproj --filter "FullyQualifiedName~ApplicationOnboardingPageTests|FullyQualifiedName~ProofUploadPageTests|FullyQualifiedName~EditProfilePageTests"
  • dotnet test LongevityWorldCup.Tests\LongevityWorldCup.Tests.csproj
  • git diff --check

Residual risk

Low. The change only rejects malformed non-string email inputs client-side before existing email validation; valid string emails keep the same behavior.

Batch update - 2026-06-22: bracketed contact email normalization

What changed:

  • Accepted common pasted/stored contact formats like Applicant Ada <athlete@example.test> and Applicant Ada <mailto:athlete@example.test?subject=Longevity> in onboarding, result-upload, edit-profile, application-review, and server-side application/payment handling.
  • Kept the existing strict email validation after extraction, so arbitrary invalid contact values still fail or get ignored.

Why it matters:

  • Reduces submission and review-payment friction when contact emails come from mail clients, athlete metadata, or admin workflows that include display-name wrappers.
  • Keeps Reply-To and confirmation/payment handoff emails pointed at the athlete/applicant instead of dropping otherwise usable contacts.

Verification:

  • dotnet test LongevityWorldCup.Tests\LongevityWorldCup.Tests.csproj --filter "FullyQualifiedName~ApplicationControllerValidationTests|FullyQualifiedName~ApplicationOnboardingPageTests|FullyQualifiedName~ApplicationReviewPageTests|FullyQualifiedName~ProofUploadPageTests|FullyQualifiedName~EditProfilePageTests"
  • dotnet test LongevityWorldCup.Tests\LongevityWorldCup.Tests.csproj
  • git diff --check

Residual risk:

  • Browser-side coverage is structural string assertions rather than an end-to-end browser exercise; server normalization has direct functional coverage.

Batch update - 2026-06-22: underscored athlete contact fallback

What changed:

  • Existing-athlete lookup for result uploads and edit requests now checks hyphenated folder keys converted back to underscore slugs before falling back to the broad name scan.
  • Added a regression test covering a hyphenated submission key resolving an existing underscored athlete folder and recovering its media contact email.

Why it matters:

  • Recent application email threads showed manual follow-up when result/payment review emails had no applicant email. This hardens the existing contact recovery path so stored athlete contact emails are less likely to be missed by slug-shape differences.

Verification:

  • dotnet test LongevityWorldCup.Tests\LongevityWorldCup.Tests.csproj --filter FullyQualifiedName~ApplicationControllerValidationTests
  • dotnet test LongevityWorldCup.Tests\LongevityWorldCup.Tests.csproj
  • git diff --check

Residual risk:

  • This only improves direct existing-athlete lookup. It does not infer new contact emails where athlete metadata has no valid email-shaped contact.

Current batch

  • Pheno and Bortz update pages now require stored biomarker values to be finite and nonblank before seeding touched fields.
  • Bortz update autofill/expand logic now skips blank or malformed stored biomarker values instead of opening/filling fields from them.
  • Added bioage coverage for the stricter stored-biomarker guard.

Why it matters

  • Reduces result-update friction when stale or malformed handoff/profile data contains blank biomarker fields.
  • Prevents blank stored values from making partial updates look like they include changed biomarkers.

Verification

  • dotnet test LongevityWorldCup.Tests\LongevityWorldCup.Tests.csproj --filter FullyQualifiedName~BioageStoredBiomarkerTests
  • dotnet test LongevityWorldCup.Tests\LongevityWorldCup.Tests.csproj
  • git diff --check

Residual risk

  • Narrow client-side behavior change; valid numeric stored biomarker values, including numeric zero, still pass.

@github-actions

github-actions Bot commented Jun 20, 2026

Copy link
Copy Markdown

.NET test coverage

  • Line coverage: 60.1%
  • Branch coverage: 44.3%

@cursor

cursor Bot commented Jun 20, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_8d9b669f-9534-4d86-8695-140eef6ccdc9)

@cursor

cursor Bot commented Jun 21, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_4737839f-c3b8-43fd-a6a1-3c287478129d)

@nopara73 nopara73 force-pushed the codex/reduce-onboarding-submission-friction branch from 3cb61f7 to eba4e5a Compare June 21, 2026 15:23
@cursor

cursor Bot commented Jun 22, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit.

A user or team admin can review and increase usage limits in the Cursor dashboard.

(requestId: serverGenReqId_0d8e12d5-c194-4d86-bf59-1f96a54fd50e)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants