StackTrading Docs

Toast Message & Popup — Master List

Project: Stack Trading Date Created: 2026-07-23 Version: v3.20 Last Updated: 2026-08-28


0. Component Type Legend

TypePrefixBehaviour
ToastTS / TEAuto-dismiss (10s), non-blocking. Positioned top-right corner. Does NOT halt the flow. No buttons.
BannerBNPersistent message anchored in-page (top-of-screen / inline). Non-modal.
Overlay / PopupOVBlocking popup over the current screen. User must act via a button.
ConfirmCFConfirmation popup requiring an explicit user decision.
InlineINRed inline error under a field (percommon_rules.md).
Full-pageFPFull-screen block / error page. NOT a toast.

Critical rule: 404 → full-page (FP-01); 500 → full-page (FP-03); 403 → full-page / inline hard stop (FP-02 / IN-01); 400 → full-page (FP-04).


1. Toast Messages

Non-blocking, auto-dismiss (10s). Positioned top-right corner. No buttons.

Auth0 boundary: Login, Sign-up, invalid-credentials, account-lockout, and password-reset UI are Auth0-hosted (Universal Login redirect) — owned by Auth0, NOT our app. Do NOT spec app-side toasts for "wrong password" / "email already exists" / "reset link sent". Our app only owns the states below.

IDContextToast ContentType
TS-01Newsletter subscribe success (marketing)"You're subscribed. Welcome to the desk."Success
TE-SYS-01No network, request timeout, or HTTP 500 — initial page load OR action failed. Also covers client-side timeout / no server response (no HTTP status at all). Ref: UC_4.4 §BR_4.4.13."Unable to connect. Please check your network and try again"Error
TE-AUTH-01Session / Access token expired (401) — post-login"Your session has expired. Please log in again" → redirect to Auth0 loginError
TE-AUTH-02Silent token refresh failed → forced re-auth"Your session has expired. Please log in again" → redirect to Universal LoginError
TE-AUTH-04MFA / FIDO2 Passkey step-up failed on high-risk mutation"Additional verification failed. Please try again to continue."Error
TS-DASH-01Settings — an explicit save action returns HTTP 200: any tab's [Save Changes], plus the profile-photo commit. In Profile & Preferences this covers both commit paths: PATCH /profile (phone, via [Save Changes]) and PATCH /profile-photo (photo, via Crop Image [Done] or [Confirm] in CF-03) — on a photo commit the blocking overlay OV-09 closes first, then this toast is raised; the two are never shown together. Not raised by the Preferences toggles (Desk Manager, Reduce Motion), which persist silently — Ref: UC_4.6.4 §9.1 rows 4 and 7. Ref: UC_4.6.2 §5 / BR_4.6.2.16 / BR_4.6.2.15."Changes saved successfully"Success
TE-DASH-01In-Dashboard purchase (Time Extension, Reset, Rebuy, Market Data): backend rejects charge because account Status changed between modal open and CTA click (e.g., Status transitioned from Active_SIM to Failed or Promoting while modal was open). Ref: UC_4.10.4 §6, UC_4.10.3 §7."Something went wrong. Please reload for latest data."Error
TE-JRN-01POST /journal-entries returns HTTP 400 — server-side validation rejects the payload (e.g. malformed date, rating outside the 1–5 range, notes exceeding the 500-char limit) despite passing client-side checks. Ref: UC_4.4 §BR_4.4.13."The server cannot understand the request. Please check your inputs and try again"Error
TE-JRN-02GET /monthly-journal-data or POST /journal-entries returns HTTP 404 — requested resource/route not found. Edge case, not expected in normal navigation. Ref: UC_4.4 §BR_4.4.13."We couldn't load this data. Please refresh and try again"Error
TE-JRN-03Shared system toast — any API call returns HTTP 503 (service temporarily unavailable — maintenance/overload). Not exclusive to Journal: currently surfaced by GET /monthly-journal-data / POST /journal-entries per UC_4.4 §BR_4.4.13, and reusable as-is by any other endpoint that returns 503 — no new ID needed per case."The service is temporarily unavailable. Please try again in a few minutes"Error
TE-JRN-04GET /monthly-journal-data or POST /journal-entries returns HTTP 504 — gateway timeout, backend did not respond in time. Ref: UC_4.4 §BR_4.4.13."The request timed out. Please try again"Error
TS-POD-01Community page — My POD card in the unassigned state while discord_user_id IS NULL: the trader activates [Link Discord to Unlock]. Fired together with the highlight/pulse treatment on The PIT card's Link your Discord account first block, and on mobile with the smooth auto-scroll to that card. No modal and no navigation occurs. Ref: UC_4.14.2 §BR_4.14.2.3."Discord authentication is required for Pod routing."Info
TS-CERT-01Career tab Latest certificate panel or the level certificate modal — the trader activates the Copy Link share target and the browser accepts the clipboard write. The URL copied is the Public Token URL, or the Redacted Token URL when the Redacted version toggle is ON. Not shown if the browser refuses the write. Ref: UC_4.16.1 §BR_4.16.1.15."Link copied to clipboard"Success

2. Banners (BN)

Persistent, non-modal in-page messages. No auto-dismiss; cleared when the condition resolves.

IDContextBanner ContentType
BN-01POST /execute-checkout frontend session timeout (10-minute rule) — payment result not resolved within window"Payment session expired. If you already submitted your payment, please check your email for confirmation. If you have not paid yet, please try again."Error
BN-02CRM API fails on Waitlist form submit — UC_2.1.3"Unable to submit. Please try again"Error
BN-03aPost-payment 403 — refund in progress. Renders on the Service Unavailable screen while refund is being processed. Wireframe: User has paid --_ 403 or blacklist --_ refunding.png"Your transaction is being refunded."Info
BN-03bPost-payment 403 — refund completed. Renders on the Service Unavailable screen after refund signal confirmed. Wireframe: User has paid --_ 403 or blacklist - refunded.png"Your transaction is refunded."Info
BN-05User clicks a "Claim Your Account" link that has already been claimed (credentials_claimed_at IS NOT NULL) — distinct from a time-based JWT expiry. Renders on a login screen (not the generic expired-link screen). Wireframe: Click a used Claim account link.png"You have already claimed this account, please login."Info
BN-06SIM provisioning or Auth0 account creation exhausts the backend auto-retry mechanism (3 attempts) and genuinely fails — Step 7 Phase 3 (Provisioning). Renders on the provisioning interstitial screen. Ref: UC_2.8.4 §6 Exceptional Flow / UC_2.8.2 §Step 3 Exception. Paired with dispatch of Ref: SES-23."A provisioning issue occurred. Please check your email for technical support details."Error
BN-07POST /execute-checkout dedup check: provider_event_id already exists for this user_id — a previous payment for this order already succeeded (not triggered by a failed or still-in-progress payment — Ref: BR_2.8.1.5). Ref: UC_2.8.1 §5 step 6.0 / §6 Exceptional Flow — HTTP 409."You have an unclaimed account. Please check your email for your activation link."Error
BN-08User clicks [Activate Account] twice in quick succession (e.g. the same claim link opened in two browser tabs) before the first click's request has finished. Renders on the current Phase 2 "Create an Account" screen (Ref: UC_2.8.3 §5) instead of the Phase 3 interstitial."This account has already been activated. Please try logging in — if your trading floor is still being set up, we'll notify you by email once it's ready."Error

3. Blocking Overlays / Popups (OV)

Distinction:

  • Popup: Replaces the current screen content entirely. No background visible.
  • Overlay: Renders on top of the existing screen with a dimmed background.

Close icon [✕]: All OV entries have a [✕] icon at the top-left corner, except where explicitly noted as exception. On close → user returns to the screen that triggered the overlay/popup.

User must act via the button(s) listed. Overlay copy inside Quebec (Flow D) checkout must render in French, including error messages (STAGE1-020) — see §7.

Note on OV-04: Since the Waitlist Gate moved from an overlay-on-checkout-page to a dedicated Waitlist page (Ref: UC_2.1.3), OV-04 no longer renders as a blocking popup/overlay over another screen — its success content simply replaces the form content within the Waitlist page, with the page's own Header/Footer untouched. Listed as Type "Page state" (not Popup/Overlay) to reflect this; all other OV-01–OV-08 entries remain true Popup/Overlay per the distinction above.

IDTriggerContentButtonType
OV-01GET /public/platform-options returns empty array (all platforms inactive) — Step 3Title: "Trading platforms are temporarily unavailable"Body: "Trading platforms are temporarily unavailable. Please refresh or try again shortly." (Source: QnA STAGE1-011)Return to Homepage (none — no close icon)Popup
OV-02methods[] from /system/status empty (all payment rails down) — Step 6Title: "Payment methods are unavailable"Body: "Payment processing is temporarily undergoing maintenance. Please refresh or contact our support team."Return to Homepage (none — no close icon)Popup
OV-035 consecutive payment declines in a rolling 10-min window (all methods). 15-min block tracked by email address (Redis); direct API → 429. Ref: CR-20260728-002.Title: "Transaction locked"Body: "Transaction locked due to multiple failures. Please use an alternative payment rail or check with your bank."Return to Homepage (none — no close icon)Popup
OV-04Waitlist Lead Capture Form submitted successfully (allow_signups == FALSE) — UC_2.1.3. Renders as a page-content state on the dedicated Waitlist page (not an overlay/popup over another screen) — Header/Footer chrome around it is unaffected.Title: "THANK YOU / ACCESS GRANTED"Body: "Your request has been successfully registered. You are now on the priority waitlist."Return to HomepagePage state
OV-05User clicked pay; payment verification in progress — Step 7 Phase 1Gold spinner + "Please do not refresh the page or click the back button. This may take a few moments."(none — no close icon; submit disabled to prevent double charge)Popup
OV-06Payment cleared; transitioning to Phase 2 (account claim) — Step 7 Phase 1Header: "Payment Successful" Gold checkmark icon.Auto-dismisses after 2 seconds → checkout transitions to confirmation state.(none — no close icon; auto-dismiss after 2 s)Popup
OV-07SIM provisioning or Auth0 account creation exhausts the backend auto-retry mechanism (3 attempts) and genuinely fails. Covers: Auth0 account creation failure (Ref: UC_2.8.3 §5) AND SIM provisioning / Auth0 failure at the Phase 3 provisioning interstitial (Ref: UC_2.8.4 §6). Paired with dispatch of Ref: SES-23.Header: "Account Creation Failure"Body: "Payment Successful. We are experiencing a temporary delay generating your secure dashboard login. Our Operations team has been alerted and will email your access link shortly."(none — no close icon)Overlay
OV-08Step 6 Pay click: server-side price/tax re-check detects price has changed — e.g. Founder cohort slot filled up reverting to Standard pricing, or tax rate changed since POST /calculate-cart. No charge created, no promo reserved. Ref:BR_2.1.5.2Title: "Please refresh to get the latest price"Body: "The pricing for this package has just been updated. Please refresh the page to see the latest price before continuing."Refresh now — closes this overlay and refreshes the Order Summary with the updated price/tax. No page reload. (none — no close icon)Popup
OV-09Settings → Profile & Preferences → a profile-photo commit is in flight (on success it closes and TS-DASH-01 is raised): the trader clicked [Done] in the Crop Image modal (signed URL → PUT to S3 → PATCH /profile-photo), or [Confirm] in CF-03 (PATCH /profile-photo with profile_photo_url: null). Ref: UC_4.6.2 §6 Alternative Flow A / BR_4.6.2.6.Gold spinner + "Updating avatar..."(none — no close icon; dismissed by the system on success or failure. On failure the previous avatar is restored and the matching error toast is shown)Popup

4. Full-Page Blocks (FP)

Not toasts. Full-screen block / error pages.

IDTriggerContentButton
FP-01Page not found (404)Title: "Page Not Found"Body: "The server cannot find the requested page. If you believe this to be an error, please review our FAQ."Return to Homepage
FP-02Sanctioned region — Gate 2 / Flow F (HTTP 403 at page load)Refer design: References\Wireframe\Stage 1\Flow F Gate 2 - Geoblock (Absolute).png"Service Unavailable — Stack Trading's evaluation services are not available in your region due to regulatory restrictions. We are unable to process registrations or accept payments from your current location. If you believe this is an error, please contact support@stacktrading.com with your location details."Return to Homepage
FP-03Server error (500)Title: "Something Went Wrong"Body: "Your request could not be processed. Please try again. The server encountered an unexpected condition that prevented it from fulfilling the request."Return to Homepage
FP-04Bad request (400)Title: "Bad Request"Body: "The server cannot understand the request due to bad syntax or malformed request. If you believe this to be an error, please review our FAQ."Return to Homepage
FP-05Link invalid (e.g. user changes the token). Ref: UC_2.8.3 §5.Title: "Invalid Link"Body: "This activation link is no longer valid. Please contact support if you need help."Return to Homepage

5. Inline Errors & Hard Stops (IN)

Not toasts. Red inline messages anchored under a field / in-page.

IDTriggerContentButton
IN-01POST /calculate-cart returns 403 at Step 5 (VPN / restricted billing country)Inline red warning:"Due to regulatory restrictions, Stack Trading cannot accept clients from this jurisdiction."(none — hard stop; auto-clears when valid country selected)
IN-02Step 5 EmailonBlur — Blacklist Check match (HTTP 403 from POST /capture-lead, Step A). STAGE1-083."Account restricted. Please contact support." (does not reveal blacklist reason)(none — hard stop; [Next] disabled until email is edited to a value that clears the check)
IN-03Step 5 EmailonBlur — Duplicate Account Check: existing record status = 'Active_SIM' or 'Active_DMA' (HTTP 409 from POST /capture-lead, Step B). STAGE1-084."You already have an active account."(none — hard stop; [Next] disabled until email is edited to a value that clears the check)
IN-04Step 5 EmailonBlur — Duplicate Account Check: existing record status = 'Guest' AND provider_event_id IS NOT NULL (paid, not yet claimed — HTTP 409). STAGE1-084."You have an unclaimed account. Please check your email for your activation link."(none — hard stop; [Next] disabled until email is edited to a value that clears the check)
IN-05Step 5 Confirm EmailonBlur — value does not match the Email field (valid format, but different from Email). Ref: BR_2.6.1.7."Emails do not match."(none — error; auto-clears when values match)
IN-07Step 5 Confirm EmailonBlur — value is not a valid email format (fails CR-09 §9.1 format validation). Ref: BR_2.6.1.7."Please enter a valid email address."(none — error; auto-clears when valid format entered)
IN-06Phone onBlur / on submit, or Country Code dropdown change — Duplicate Phone Number Check (HTTP 409, same-country scope: dial code + number must both match). Shared by every phone field in the system: Phase 2 Account Claim (POST /claim-account — Ref: BR_2.8.3.4) and Settings → Profile & Preferences (PATCH /profile — Ref: BR_4.6.2.4)."This phone number is already registered to another account."(none — hard stop; the screen's primary button — [Activate Account] / [Save Changes] — stays disabled until the phone number is edited to a unique value)
IN-08RETIRED 2026-08-24Settings → Profile & Preferences → Phone format/length failure. The Settings phone field no longer carries its own copy — it uses the CR-09 §9.2 strings verbatim, like the checkout block. Do not reference IN-08 in new docs. Ref: BR_4.6.2.3."Invalid phone number format. Please check and try again" → replaced by CR-09 §9.2: "Please enter phone number" (empty) · "Please enter a valid phone number" (invalid format / length)(none — error; [Save Changes] disabled until the value passes)
IN-09RETIRED 2026-08-24Settings → Profile & Preferences → Phone duplicate check. Folded into IN-06, which now serves both the checkout and the Settings phone field. Do not reference IN-09 in new docs. Ref: BR_4.6.2.4."This phone number is already registered with another account" → use IN-06: "This phone number is already registered to another account."(none — hard stop; [Save Changes] disabled until phone is edited to a unique value)
IN-10Settings → Profile & Preferences → Phone onBlur / on submit — the submitted E.164 value is identical to the currently saved one. Ref: BR_4.6.2.5. The only Settings-specific phone string that survives — neither CR-09 §9.2 nor the checkout block has a counterpart, because the checkout phone field has no "currently saved" value to compare against."The new phone number cannot be the same as your current one"(none — error; [Save Changes] disabled until the value differs)
IN-11Step 5 Email onBlur OR Confirm Email onBlur — value's domain is @stacktrading.com (Ref: BR_2.6.1.10). CR-20260815-001."Stacktrading email addresses are not allowed for this field"(none — hard stop; [Next] disabled until the field is edited to a non-blocked domain)
IN-PROMO-01Promo code applied successfully — inline text below promo input field at Step 6 (UC_2.7.8)"Promo code applied!"(none — success; disappears when user edits the input field)
IN-PROMO-02Promo code invalid or expired (HTTP 422) — inline text below promo input field at Step 6 (UC_2.7.8). Also shown if code is re-validated at POST /execute-checkout and fails."Invalid promo code. Please check and try again"(none — error; cleared when user edits the input field)
IN-PROMO-03User has exceededmax_uses_per_user for this promo code (HTTP 422 with per-user limit signal) — inline text below promo input field at Step 6 (UC_2.7.8)."You have already used this promo code the maximum number of times allowed."(none — error; cleared when user edits the input field)
IN-PROMO-04Applied promo code fails re-validation atPOST /execute-checkout time (expired or limit exhausted by another user between Apply and Pay) — inline text below promo input field at Step 6 (UC_2.7.8). Formerly OV-08 (overlay); converted to inline banner pattern."This promo code has expired or has already been used. Please apply a different code or continue without a promo code."[Remove] — manual button; clears the input and re-enables [Apply]. Input is NOT auto-cleared.

Field-level validation errors (required, format, max/min length) follow CR-01 · CR-02 · CR-03 — not listed here.


6. Confirmation Popups (CF)

IDTitle / TriggerContentButtons
CF-01Unsaved changes navigation warning"Are you sure you want to leave this page? Unsaved changes will be lost."Cancel / Leave
CF-02Settings → Connections & Credentials → trader clicks [Password Reset] on the Assigned Password row. Ref: UC_4.6.1 §5 step 9 / BR_4.6.1.5.⚠️ BA draft, wording pending client sign-off ([CC-UI-02]): "You'll be taken to your trading platform's own password reset page. StackTrading does not perform the reset and does not store the new password — the Assigned Password shown here will not change."🔴 The former client-verbatim string "This will instantly overwrite your current platform password and generate a new one. You will be logged out of active sessions." is withdrawn 2026-08-21 — Confirm no longer overwrites or generates anything.Cancel / Confirm — Confirm calls POST /reset-platform-password, which returns the gateway's own reset-page destination; the frontend opens it in a new tab. No StackTrading write. ⚠️ No reset URL has been supplied for any gateway yet.
CF-03Settings → Profile & Preferences → trader clicks [Remove Photo]. Required because the removal commits immediately and is not reversible via [Cancel] — the stored S3 object is hard-deleted. Ref: UC_4.6.2 §6 Alternative Flow B / BR_4.6.2.14.Title: "Remove your photo?"Body: (none — title only)Confirm / Cancel — stacked vertically, Confirm on top (Primary/gold), Cancel below (Secondary). Confirm calls PATCH /profile-photo with profile_photo_url: null; Cancel closes the popup and changes nothing

7. Localization — Quebec / Flow D (French)

ScopeRule
Checkout UI (Flow D)Rendered natively in French.
Error messages inside French checkoutMust be translated to French (OV-01…OV-04, IN-01, BN-, TE- shown within checkout).
Canada outside QuebecDefaults to Flow A (English).

8. Changelog

DateVersionUpdated itemBeforeAfterNotes
2026-08-28v3.20TS-DASH-01 (scope) · OV-09 (cross-ref)TS-DASH-01 was scoped to [Save Changes] only and explicitly excluded the photo path: "In Profile & Preferences that is PATCH /profile (phone) only; a photo commit uses OV-09 and fires no toast on success." A trader who clicked [Done] in the Crop Image modal got no success confirmation.TS-DASH-01 now covers both Settings commit paths — PATCH /profile (phone) and PATCH /profile-photo (photo, on Crop Image [Done] and on [Confirm] in CF-03). Sequencing stated: OV-09 closes first, then the toast; never both at once. OV-09 gains the matching cross-reference.User request 2026-08-28 (UC_4.6.2 v12 / BR_4.6.2.16): a photo save is a save, so it reports success like every other Settings save. Copy and ID unchanged — no new toast was created and no other consumer of TS-DASH-01 is affected.
2026-08-27v3.18TE-JRN-03 (scope)Context wording implied TE-JRN-03 was a Journal-only toast: "GET /monthly-journal-data or POST /journal-entries returns HTTP 503".Reworded to state it is a shared system toast for any HTTP 503 response, currently surfaced by the Journal APIs per UC_4.4 §BR_4.4.13 but reusable by any other endpoint without a new ID. Copy unchanged.BA instruction 2026-08-27 — TE-JRN-03 is a generic 503 toast, not scoped to Journal; clarify so other UCs can reference it directly instead of minting duplicate IDs.
2026-08-26v3.17TS-CERT-01 (new)Did not exist. No toast covered a copy-to-clipboard confirmation anywhere in the app, although Level Up Cinematic Scene Handling.pdf §3 requires one: "Clicking this must copy the unique public URL directly to the user's system clipboard with a lightweight toast notification confirming the copy."Added TS-CERT-01 "Link copied to clipboard" (Success toast) for the Copy Link share target on the level certificate modal and the Career tab Latest certificate panel. Trailing period stripped per global-rules.md → Error Handling.Source: Level Up Cinematic Scene Handling.pdf §3 Dashboard UI & Interaction Logic (client-supplied, References/Customer supplies/(Stage 2) Community & Settings/). The source mandates the toast but supplies no copy — the string is BA-authored and follows the existing Success-toast pattern of TS-DASH-01. Ref: UC_4.16.2 v1 BR_4.16.2.15 / §9.1 row 12 / §9.2 row 3.
2026-08-27v3.19IN-06 — trigger widenedTrigger listed only onBlur / on submit.Trigger now also fires on Country Code dropdown change; scope note added (dial code + number must both match — same-country).Companion change: UC_2.7-2.8_v1.md v4.1. Client directive (chat), 2026-08-27.
2026-08-25v3.15BN-09 (removed)BN-09 — error banner shown when selected market data feeds exceeded $54.00/month cap. Referenced by UC_4.15.2 BR_4.15.2.8 and UC_4.15.3.Removed — this case cannot occur. The maximum Non-Pro bundle is 4 exchanges at $18 × 3 + 1 free = $54 flat. There is no selection combination that exceeds the cap; the error is unreachable. All cross-references in UC_4.15.2 and UC_4.15.3 also removed.BA decision 2026-08-25.
2026-08-24v3.14TE-JRN-01 (copy)"We couldn't save your entry. Please check your inputs and try again""The server cannot understand the request. Please check your inputs and try again"Copy aligned to standard HTTP 400 language for consistency with FP-04 body copy.
2026-08-24v3.13IN-08 (retired) · IN-09 (retired) · IN-06 (scope widened) · IN-10 (note)Settings → Profile & Preferences owned three private phone-error strings: IN-08 "Invalid phone number format. Please check and try again", IN-09 "This phone number is already registered with another account", IN-10. IN-06 was scoped to Phase 2 Account Claim only, and CR-09 §9.2 / IN-06 were deliberately not reused (QnA_init_docs A-09/A-10/A-12).IN-08 and IN-09 retired. The Settings phone field now uses the shared copy verbatim: empty → "Please enter phone number" and invalid format/length → "Please enter a valid phone number" from CR-09 §9.2; duplicate → IN-06. IN-06's trigger widened to cover both phone fields (checkout POST /claim-account + Settings PATCH /profile) and its Button column generalised to "[Activate Account] / [Save Changes]". IN-10 kept and annotated as the only surviving Settings-specific phone string. Both retired rows stay in the table struck through, so existing links do not 404.BA instruction 2026-08-24 — reverses the 2026-08-11 decision recorded in QnA_init_docs.md A-09/A-10/A-12 ("tạo chuỗi riêng cho Settings"): "chỉnh lại validation rule cho phone number, refer đến 9.2 Phone Number Field của Common Rule và checkout block, không sử dụng validation rule text hiện tại của field phone number nữa". One phone field, one set of strings, system-wide. CR-09 §9.2 itself is unchanged — this change makes Settings conform to it rather than editing it. UC_2.8.3 (checkout) is behaviourally unaffected; only IN-06's trigger text broadened. Ref: UC_4.6.2 v10 BR_4.6.2.3 / BR_4.6.2.4.
2026-08-21v3.12CF-02 (copy + buttons column)Client-verbatim copy from 2026-08-17: "This will instantly overwrite your current platform password and generate a new one. You will be logged out of active sessions." Buttons column read simply "Confirm calls POST /reset-platform-password", carrying the overwrite model.Copy withdrawn and replaced with a BA draft flagged ⚠️ pending client sign-off: "You'll be taken to your trading platform's own password reset page. StackTrading does not perform the reset and does not store the new password — the Assigned Password shown here will not change." Buttons column now states what Confirm actually does — returns the gateway's reset destination, opened in a new tab, with no StackTrading write — and flags that no reset URL exists yet for any gateway.Follows the client instruction of 2026-08-20 (reset handed to the third party) and the BA/client answer of 2026-08-21: "giờ confirm chỉ dẫn sang tab mới để trader reset password thôi. Không overwrite vào assigned password nữa." The old string described the overwrite model that UC_4.6.1 v1.5 already removed, so the popup copy was the last place still asserting it. The modal is retained — it warns the trader they are leaving the Dashboard and that the on-screen value will stop being accurate. Ref: UC_4.6.1 v1.7 BR_4.6.1.5 / §9.1 row 12.
2026-08-21v3.11CF-03 (copy + buttons)BA-authored placeholder, flagged ❓ "no design frame exists for this popup": body copy "Remove your profile photo? Your avatar will revert to your initials across the Dashboard and the current image cannot be recovered.", buttons Cancel / Remove in the horizontal CF-01/CF-02 layout.Replaced with the design copy: Title "Remove your photo?", no body text. Buttons are Confirm / Cancel, stacked vertically with Confirm on top (Primary/gold) and Cancel below (Secondary). ❓ flag removed.BA supplied the design frame 2026-08-21. Note the layout differs from CF-01/CF-02 (horizontal Cancel-then-Confirm): this popup stacks its buttons and puts the affirmative action first. Verb also differs — Confirm, not Remove.
2026-08-21v3.10OV-09, CF-03, TS-DASH-01, IN-09 (endpoint references only)All four pointed at POST /profile, the single write endpoint from RFQ_ Stack Trading Prop Tech V7.pdf §Page 36.Re-pointed to the split endpoints: OV-09 and CF-03 now name PATCH /profile-photo; IN-09 names PATCH /profile; TS-DASH-01 gained a line clarifying that in Profile & Preferences it covers the phone save only — a photo commit shows OV-09 and fires no success toast.Sotatek BE team API review 2026-08-21 (UC_4.6.2 v8 / BR_4.6.2.15): POSTPATCH, and one write endpoint split into PATCH /profile-photo + PATCH /profile. Reference-only change — no copy, trigger condition, or button label was touched.
2026-08-21v3.9OV-09, CF-03 (both new)Did not exist. UC_4.6.2 staged the profile photo locally and committed it through [Save Changes], so there was no in-flight avatar state to cover and no destructive removal to confirm.Added OV-09 — gold spinner + "Updating avatar...", the blocking overlay shown while a profile-photo commit runs. Added CF-03"Remove your profile photo? Your avatar will revert to your initials across the Dashboard and the current image cannot be recovered.", buttons Cancel / Remove.BA instruction 2026-08-21 (UC_4.6.2 v7): the photo now commits immediately on Crop Image [Done] and the old S3 object is hard-deleted, independent of [Save Changes] — which forces [Remove Photo] to commit immediately too, hence the confirmation. ❓ Both strings are BA-authored; the design set has an "Updating avatar..." frame but no frame for the removal confirmation. TS-DASH-01 is unchanged and now covers the phone save only.
2026-08-19v3.8TE-SYS-01 (Context)"No network — initial page load OR action failed." Did not mention timeout or 500 explicitly."No network, request timeout, or HTTP 500 — initial page load OR action failed. Also covers client-side timeout / no server response (no HTTP status at all)." Added Ref to UC_4.4 §BR_4.4.13.User request: sync TE-SYS-01's timeout wording with UC_4.4's BR_4.4.13, which reuses TE-SYS-01 for both its 500 row and its "Timeout / no network" row. TE-JRN-04 (504) definition below is left as-is — UC_4.4 dropped only its own table row referencing it, not this master-list entry.
2026-08-19v3.7TE-JRN-01, TE-JRN-02, TE-JRN-03, TE-JRN-04 (all new)Did not exist. UC_4.4 (Journal & Heatmap) had no dedicated error toasts for GET /monthly-journal-data or POST /journal-entries failing with a specific HTTP status.Added 4 new error toasts, one per non-network HTTP status the Journal APIs can return: TE-JRN-01 (400 — validation), TE-JRN-02 (404), TE-JRN-03 (503), TE-JRN-04 (504). 401 and 500 reuse the existing TE-AUTH-01/TE-SYS-01 respectively — no new IDs needed for those two.User request — build a per-status-code error-message table for UC_4.4 covering 401/400/404/500/503/504. Ref: UC_4.4 §BR_4.4.13.
2026-08-18v3.6BN-08 (new)Did not exist — no banner covered clicking [Activate Account] twice before the first click's request finished.Added — banner shown when the user clicks [Activate Account] twice (e.g. same link opened in two tabs) before the first submission finishes. "This account has already been activated. Please try logging in — if your trading floor is still being set up, we'll notify you by email once it's ready."Ref: UC_2.8.3 §5 new "[Clicking Activate Account twice]" case. Client supplement (chat), 2026-08-18.
2026-08-17v3.6CF-02 (new)Did not exist. The Connections & Credentials reset action was specified as a route-out to the gateway's own portal, so no app-side confirmation was needed.Added — platform password reset confirmation modal. Copy is client-supplied verbatim: "This will instantly overwrite your current platform password and generate a new one. You will be logged out of active sessions." Buttons Cancel / Confirm; Confirm calls POST /reset-platform-password.Client-confirmed (Adrian Stack, 2026-08-17): "Do not link out externally. When a user clicks 'Request Password Reset', it must open an internal confirmation modal with a warning." Ref: QnA STAGE 2 Settings [CC-BIZ-06]; UC_4.6.1 v1.4 BR_4.6.1.5 / §9.1 row 12. Modal has no wireframe yet ([CC-UI-02]).
2026-08-14v3.5FP-05 (new)Did not exist.Added — Invalid Link full-page block. Trigger: link invalid (e.g. user changes the token). Title "Invalid Link", body "This activation link is no longer valid. Please contact support if you need help.", button "Return to Homepage".Ref: UC_2.8.3 §5 new "[Claim link invalid]" case.
2026-08-06v3.0FP-01 (404), FP-03 (500), FP-04 (400 — new)FP-01: single-line "Page not found or has been removed", button "Back to Home" (Design pending). FP-03: single-line "The system is currently unavailable. Please try again later", button "Back to Home" (Design pending). FP-04: did not exist.FP-01: added Title "Page Not Found" + Body "The server cannot find the requested page. If you believe this to be an error, please review our FAQ." + button "Return to Homepage". Removed (Design pending). FP-03: added Title "Something Went Wrong" + Body "Your request could not be processed. Please try again. The server encountered an unexpected condition that prevented it from fulfilling the request." + button "Return to Homepage". Removed (Design pending). FP-04: added placeholder for 400 Bad Request (pending BA content from Figma node-id=8058-108939). Updated §0 critical rule: added 400 → FP-04.BA provided Figma content for 404 & 500 screens. 400 screen pending — Figma inaccessible.
2026-07-27v1.6BN-01 (renumbered to BN-04)Described the old post-payment 409 duplicate-account flow (checkout-time trigger).Marked ⚠️ Superseded by IN-02/IN-03/IN-04; kept for history only; renumbered from BN-01 to BN-04.Blacklist/Duplicate checks moved to Step 5 emailonBlur per STAGE1-083/STAGE1-084.
2026-07-27v1.6BN-01 (repurposed)ID freed up by the BN-04 renumber above.Added —POST /execute-checkout gateway timeout banner. "Time out. Please try again"Source: UC_2.8.1 §5 step 8 / §6 Exceptional Flow. BA feedback item 23.
2026-07-27v1.6OV-08 → IN-PROMO-04Modeled as a blocking overlay with [OK] button.Converted to inline banner pattern below the promo input, with manual [Remove] button; input retains the invalid code (not auto-cleared). Removed OV-08 entry entirely.BA feedback item 10 — invalid-promo re-validation should not block the whole screen.
2026-07-27v1.6IN-02 (new)Did not exist.Added — Step 5onBlur Blacklist Check hard stop. "Account restricted. Please contact support."Source: STAGE1-083 (confirmed Adrian Stack 2026-07-27). BA feedback item 7.
2026-07-27v1.6IN-03 (new)Did not exist.Added — Step 5onBlur Duplicate Account Check, Active_SIM/Active_DMA. "You already have an active account."Source: STAGE1-084 (confirmed Huyen Dinh + Adrian Stack 2026-07-27). BA feedback item 7.
2026-07-27v1.6IN-04 (new)Did not exist.Added — Step 5onBlur Duplicate Account Check, Guest + provider_event_id IS NOT NULL. "You have an unclaimed account. Please check your email for your activation link."Source: STAGE1-084. BA feedback item 7.
2026-07-27v1.6BN-05 (new)Did not exist.Added — used Claim Account link banner on login screen."You have claimed this account, please login."Source: WireframeClick a used Claim account link.png. Ref'd from UC_2.8.3 §5.
2026-07-28v1.8OV-08 (new)Referenced fromBR_2.1.5.2 as "OV-07" but that ID was already in use for the Auth0 account-creation-failure overlay — dangling/conflicting reference.Added as OV-08 (OV-07 stays as-is for its existing Auth0 failure case) — Step 6 Pay-click price-change popup (Founder cohort sold out). "Please refresh to get the latest price" / "Refresh now".BA feedback — price recheck at Pay click.
2026-07-28v1.9OV-03 (trigger text)"15-min IP block (Redis); direct API → 429"."15-min block tracked by email address (Redis); direct API → 429." Added Ref: CR-20260728-002.CR-20260728-002 — Failed Payment Lockout changed from IP-based to Email-based blocking.
2026-07-28v1.9BN-05 (copy)"You have claimed this account, please login.""You have already claimed this account, please login."STAGE1-101 confirmed copy fix — clarify the account was previously claimed.
2026-07-29v2.0IN-05 (new)Did not exist.Added — Step 5 Confirm EmailonBlur mismatch/invalid format hard stop. "Emails do not match."CR-20260729-001; Client (chat), 2026-07-29. Ref: UC_2.6.1 BR_2.6.1.7.
2026-07-30v2.1IN-06 (new)Did not exist.Added — Phase 2 Account Claim PhoneonBlur Duplicate Phone Number Check. "This phone number is already registered to another account."Phase 2 Account Claim requirement update.
2026-07-30v2.2UC_2.8.4 §6 — Provisioning frontend timeout removed; BN-06 (new)Frontend enforced a max 60s timeout on POST /claim-account; on timeout, a [Retry] button + error banner rendered, with a 3-outcome (A/B/C) idempotent retry table. Did not exist: BN-06.Removed the 60s frontend timeout and [Retry] button entirely — interstitial holds indefinitely until the session token arrives. Failure handling delegated to the existing backend auto-retry mechanism (Ref: UC_2.8.2 §Step 3 Exception — 5s/30s backoff, 3 attempts). If all attempts fail, backend fires Freshdesk ticket + dispatches SES-23 email; frontend shows banner BN-06 (new) "A provisioning issue occurred. Please check your email for technical support details." on the provisioning screen — no user-facing retry action.Client confirmed (chat), 2026-07-30 — remove 60s provisioning timeout/retry mechanism.
2026-07-30v2.3BN-03a/BN-03b, OV-01…OV-08, §7 table (formatting fix)Missing space before bold markers (refund**in progress**, in**French**, Defaults to**Flow A**); OV table Content cells crammed Title/Header + Body onto one line with ambiguous *** boundaries, causing literal * rendering. OV-01 Body text was truncated ("...Please refresh or tryco*").Added missing space before bold markers. Restructured OV Content cells to use <br /> between Title/Header and Body so each renders on its own line. Completed OV-01 Body text per confirmed source.Formatting-only fix, no content/meaning change except OV-01 Body completion. Source: QnA STAGE1-011 (References/QnA from clients/02_STAGE1_CHECKOUT_ONBOARDING/QnA_STAGE1_CHECKOUT_ONBOARDING.md).
2026-07-30v2.4BN-01 (trigger + copy)POST /execute-checkout gateway timeout (2-minute rule). Copy: "Time out. Please try again". Timeout was a hard block requiring gateway response.Changed to frontend session timeout (10-minute rule) — the frontend independently gives up waiting on the third-party gateway/webhook after 10 minutes regardless of backend state, so users who walk away mid-payment aren't permanently blocked. Copy: "Payment session expired. If you already submitted your payment, please check your email for confirmation. If you have not paid yet, please try again."Client feedback (chat) — frontend must not permanently lock on a timeout it doesn't control; backend webhooks remain the source of truth in the background. Ref: UC_2.8.1 §5 step 8 / §6 Exceptional Flow / BR_2.8.1.1 / BR_2.8.1.3 / new BR_2.8.1.4.
2026-07-30v2.5BN-01, OV-05 (anchors); OV table <br /> tagsBN-01 and OV-05 had no <a id> anchor, so the new cross-references added in v2.4 (list-toast-popup.md#bn-01, #ov-05 from UC_2.7-2.8_v1.md) pointed at nothing. OV-01…OV-08 Content cells used bare <br /> (not self-closed), invalid in the MDX/JSX pipeline used by docs-site.Added <a id="bn-01"></a> and <a id="ov-05"></a>. Normalized all <br /> in the OV table (OV-01, OV-02, OV-03, OV-04, OV-06, OV-07, OV-08) to self-closed <br />.Self-review while auditing the v2.4 change for broken links — no content/meaning change. Note: most BN-/OV-/FP-*/TE-SYS-01 anchors elsewhere in this file are still missing, and even existing <a id> anchors are stripped by the docs-site Fumadocs build (confirmed via built HTML — links still work in raw/GitHub markdown rendering). Tracked as a separate, wider follow-up — not fixed here.
2026-08-01v2.6OV-04 (Type, Button, §3 note)Type = "Overlay"; Button column = "Return to Homepage | [✕]"; rendered as a blocking overlay on top of the checkout page.Type changed to "Page state"; [✕] close icon removed from Button column (only "Return to Homepage" remains); added a note under §3 explaining OV-04 now renders as page content on the dedicated Waitlist page rather than a blocking overlay.Follow-up to Gate 1 Waitlist overlay → dedicated page change (Ref: UC_2.1-2.6_v1.md changelog v5). User decision (BA session), 2026-08-01 — no more Close button on the Waitlist page; Header/Footer unaffected.
2026-08-02v2.7FP-02 (Button)Button = (none — hard stop)Button = Return to HomepageClient feedback — 403 screen must have a Return to Homepage button, not an empty hard stop.
2026-08-04v2.8IN-05 (split), IN-07 (new)IN-05 covered both mismatch AND invalid format with one message "Emails do not match."Split into two: IN-05 → mismatch only ("Emails do not match."); new IN-07 → invalid format ("Please enter a valid email address.").BA directive — separate error messages for email format vs mismatch on Confirm Email field.
2026-08-06v2.9BN-07 (new)Did not exist.Added —POST /execute-checkout dedup check banner. "You have an unclaimed account. Please check your email for your activation link."Source: BA gap analysis — UC_2.8.1 POST /execute-checkout lacked a pre-gateway idempotency check; HTTP 409 exceptional flow was dangling with no trigger in §5.
2026-08-08v3.1OV-08 — Trigger + [Refresh now] behaviorTrigger listed only Founder cohort sold out; [Refresh now] button had no spec'd behavior; no note that promo is not reserved.Added tax rate change as second trigger. Added note "no promo reserved". Spec'd [Refresh now]: closes overlay and refreshes Order Summary with updated price/tax — no page reload.BA directive 2026-08-08.
2026-08-08v3.2BN-07 — trigger description correctedSaid provider_event_id could mean the payment was "in-flight or completed" — contradicts the schema (only ever written on success).Corrected to "a previous payment already succeeded" only. Cross-referenced new BR_2.8.1.5 (UC_2.7-2.8_v1.md), which allows retry when the prior payment failed or is still in progress.Client supplement (chat), 2026-08-08.
2026-08-11v3.4TS-DASH-01, IN-08, IN-09, IN-10 (all new)Did not exist. The Settings module had no Save-success toast, and no inline errors for the Profile & Preferences phone field.Added TS-DASH-01 "Changes saved successfully" (Success toast, shared by every Settings tab with a Save button). Added IN-08 "Invalid phone number format. Please check and try again", IN-09 "This phone number is already registered with another account", IN-10 "The new phone number cannot be the same as your current one".BA decision 2026-08-11 (QnA_init_docs UC_4.6.2 A-09/A-10/A-11/A-12): Settings gets its own phone-error strings taken from the BA design; the checkout strings (CR-09 §9.2 and IN-06) are deliberately left unchanged, so UC_2.8.3 is not affected. All four strings had their trailing period stripped from the design copy per global-rules.md → Error Handling.
2026-08-09v3.3TE-DASH-01 (new)Did not exist.Added — In-Dashboard purchase charge rejected because account Status changed between modal open and CTA click. "Something went wrong. Please reload for latest data."Per BA feedback on UC_4.10.4 (feedback #10): close popup, hiện toast này khi Status không còn Active_SIM tại thời điểm charge.
2026-08-15v3.5OV-07 (header + trigger scope), BN-06 (removed)OV-07 header was "Payment Successful" (the body's own leading sentence promoted to the header) — misleading for a failure case (flagged as naming misnomer in QC, GAP-P2-05). BN-06 duplicated the same SIM/Auth0 provisioning-failure case as a separate Error banner on the Phase 3 interstitial (Ref: UC_2.8.4 §6), conflicting with OV-07's coverage of the same failure at Phase 2 (Ref: UC_2.8.3 §5).OV-07 header changed to "Account Creation Failure". Body copy unchanged (still opens with "Payment Successful." to reassure the user the charge went through before explaining the account-setup delay). OV-07 trigger description widened to explicitly cover both Auth0 failure (UC_2.8.3 §5) and the Phase 3 interstitial SIM/Auth0 failure (UC_2.8.4 §6) as one single overlay. BN-06 row removed entirely — provisioning failure now always renders as OV-07, never a banner.Client directive (chat), 2026-08-15 — consolidate provisioning-failure UI to one overlay; fix misnomer header (title must not read as a success state), keep "Payment Successful" as the reassurance line inside the body. Cross-ref: UC_2.7-2.8_v1.md UC_2.8.4 §4/§6 updated to match.

On this page