Skip to content

promote fix for missing space on consent screen to#168

Merged
aspiers merged 5 commits intoproductionfrom
dev
May 7, 2026
Merged

promote fix for missing space on consent screen to#168
aspiers merged 5 commits intoproductionfrom
dev

Conversation

@aspiers
Copy link
Copy Markdown
Contributor

@aspiers aspiers commented May 7, 2026

Emergency hotfix for ME

aspiers and others added 5 commits May 5, 2026 19:32
Adds a second @otp-expiry scenario that backdates the auth_flow row
via the existing /_internal/test/expire-auth-flow hook, then submits
a still-valid OTP. After PR #154's reactive abort gate the OTP form
pings /auth/ping before submitting; with the auth_flow row dead the
ping reports `flow_expired`, the gate navigates to /auth/abort, and
cleanExit serves its Tier-2 styled "Sign-in session expired" fallback
page (the OAuth client redirect path needs the dead row's clientId,
which is exactly what's missing here).

The scenario asserts both signals — the ping reason (proving
auth_flow specifically tripped, not PAR) and the abort fallback
page — so a regression that, say, swaps which timer the gate honours
would still be caught.

Without this guardrail nothing in CI would notice if AUTH_FLOW_TTL_MS
were quietly shortened back to the OTP TTL; the existing scenario
only proves the 10-min-and-resend path works, not that the 60-min
boundary is enforced.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ng-space-between-account-and-email-address

fix(pds-core): add email label spacing
Copilot AI review requested due to automatic review settings May 7, 2026 15:41
Copy link
Copy Markdown

@claude claude Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.

Tip: disable this comment in your organization's Code Review settings.

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 7, 2026

⚠️ No Changeset found

Latest commit: fa588c8

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link
Copy Markdown

vercel Bot commented May 7, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
epds-demo Ready Ready Preview, Comment May 7, 2026 3:42pm

Request Review

@railway-app
Copy link
Copy Markdown

railway-app Bot commented May 7, 2026

🚅 Deployed to the ePDS-pr-168 environment in ePDS

Service Status Web Updated (UTC)
@certified-app/demo ✅ Success (View Logs) Web May 7, 2026 at 3:45 pm
@certified-app/demo untrusted ✅ Success (View Logs) Web May 7, 2026 at 3:45 pm
@certified-app/pds-core ✅ Success (View Logs) Web May 7, 2026 at 3:44 pm
@certified-app/auth-service ✅ Success (View Logs) Web May 7, 2026 at 3:44 pm

@railway-app railway-app Bot temporarily deployed to ePDS / ePDS-pr-168 May 7, 2026 15:42 Destroyed
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 7, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1a9d7673-10cb-4efd-a5f0-f15ba938a4fd

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented May 7, 2026

@aspiers aspiers merged commit 347a3fc into production May 7, 2026
13 of 14 checks passed
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR appears to bundle a small UI text tweak (fixing a missing separator before an enriched email label) together with new E2E regression coverage around auth-flow expiry handling and a tracking entry for future enrichment E2E work.

Changes:

  • Adjust chooser enrichment email-label rendering to include a leading space before the email text.
  • Add a new passwordless-auth E2E scenario that forces auth_flow expiry and asserts the /auth/ping reason + abort fallback page, including new Playwright routing logic to capture the ping response body across navigation.
  • Add a new .beads epic entry for consent/chooser enrichment E2E coverage work.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/pds-core/src/chooser-enrichment.ts Tweaks injected enrichment script output for email label text spacing.
features/passwordless-authentication.feature Adds a new regression scenario documenting/validating auth_flow TTL expiry behavior.
e2e/support/world.ts Extends test world state to store the next /auth/ping response body.
e2e/step-definitions/auth.steps.ts Implements new expiry + assertion steps, including a /auth/ping route interceptor to capture response body before navigation.
.beads/issues.jsonl Adds an epic issue entry for future enrichment E2E coverage.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 199 to 204
var label = document.createElement('span');
label.className = 'epds-email-label';
label.style.cssText =
'min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;'
label.textContent = m.email;
label.textContent = ' ' + m.email;
if (m.el.dataset) m.el.dataset.epdsEnriched = '1';
Comment on lines +496 to +498
# If someone shortens AUTH_FLOW_TTL_MS back to the OTP TTL we want to
# catch it here: past the 60-minute mark, even a freshly verified OTP
# must NOT recover the flow.
@blacksmith-sh
Copy link
Copy Markdown
Contributor

blacksmith-sh Bot commented May 7, 2026

Found 63 test failures on Blacksmith runners:

Failures

Test View Logs
Cucumber//favicon.ico alias serves an SVG on both services - #1.1 View Logs
Cucumber//favicon.ico alias serves an SVG on both services - #1.2 View Logs
Cucumber//xrpc/_health reports the upstream PDS version View Logs
Cucumber/Account settings login uses standalone OTP View Logs
Cucumber/Auth service /health reports the ePDS version View Logs
Cucumber/Auth-service login page references both favicon variants View Logs
Cucumber/Backup email verification link is delivered View Logs
Cucumber/Button is rendered when the client declares epds_handle_login_url View Logs
Cucumber/
Clicking Resend after the PAR has died bails to the OAuth client without issuing a new
OTP
View Logs
Cucumber/Clicking the button again returns to email-entry mode View Logs
Cucumber/Clicking the button toggles the email form into handle-entry mode View Logs
Cucumber/DID login hint is resolved and skips the email form View Logs
Cucumber/Email login hint skips the email form View Logs
Cucumber/Existing user sees consent screen for a new client View Logs
Cucumber/Expired OTP + expired PAR — clean exit back to the OAuth client View Logs
Cucumber/Expired OTP is rejected, resend recovers the flow View Logs
Cucumber/Expired PAR redirects back to the OAuth client instead of stranding the user View Logs
Cucumber/Favicon SVG assets are served on both services - #1.1 View Logs
Cucumber/Favicon SVG assets are served on both services - #1.2 View Logs
Cucumber/Favicon SVG assets are served on both services - #1.3 View Logs
Cucumber/Favicon SVG assets are served on both services - #1.4 View Logs
Cucumber/First-time user gets an auto-created PDS account View Logs
Cucumber/Handle login hint is resolved and skips the email form View Logs
Cucumber/Login hint from PAR body is used when not on query string View Logs
Cucumber/New user authenticates with email OTP View Logs
Cucumber/New user receives a welcome OTP email View Logs
Cucumber/New user skips consent when signing up via a trusted client View Logs
Cucumber/New user still sees consent when signing up via an untrusted client View Logs
Cucumber/OAuth flow expires after the auth_flow TTL elapses View Logs
Cucumber/OTP form's heartbeat reaches /auth/ping with ok:true View Logs
Cucumber/OTP verification rejects wrong code View Logs
Cucumber/Password-based login does not work for auto-created accounts View Logs
Cucumber/PDS /health reports the ePDS version View Logs
Cucumber/PDS /oauth/authorize accepts sec-fetch-site: same-site View Logs
Cucumber/prompt=login + expired PAR — clean exit back to the OAuth client View Logs
Cucumber/Recovery via backup email + expired PAR — clean exit back to the OAuth client View Logs
Cucumber/Refreshing the login page does not break the flow View Logs
Cucumber/Returning user authenticates with email OTP View Logs
Cucumber/Returning user receives a sign-in OTP email View Logs
Cucumber/Returning user skips consent for a previously-approved untrusted client View Logs
Cucumber/Returning user who has already approved skips consent View Logs
Cucumber/Sign-up consent skip does not carry over to a second client View Logs
Cucumber/Submitting a handle redirects to the client's handle login URL View Logs
Cucumber/Too many failed OTP attempts locks out the token View Logs
Cucumber/Trusted and untrusted demo clients render visibly differently View Logs
Cucumber/Trusted client's CSS is applied to the choose-handle page View Logs
Cucumber/Trusted client's CSS is applied to the login page View Logs
Cucumber/Trusted client's CSS is applied to the recovery page View Logs
Cucumber/Trusted client's CSS is applied to the upstream OAuth consent page View Logs
Cucumber/Trusted client's favicon is applied to the choose-handle page View Logs
Cucumber/Trusted client's favicon is applied to the login page View Logs
Cucumber/Trusted client's favicon is applied to the recovery page View Logs
Cucumber/Two Resend cycles after silent PAR death — clean exit back to the OAuth client View Logs
Cucumber/Unknown login hint falls back to email form View Logs
Cucumber/Untrusted client does not get CSS injection View Logs
Cucumber/Untrusted client does not get favicon injection View Logs
Cucumber/Upstream /account/sign-in gets favicon injected View Logs
Cucumber/Upstream /oauth/authorize gets favicon injected View Logs
Cucumber/User changes their handle View Logs
Cucumber/User deletes their account View Logs
Cucumber/User denies consent View Logs
Cucumber/User views and revokes a session View Logs
Cucumber/User views their account information View Logs

Fix in Cursor

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.

3 participants