Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/modernist.css
Original file line number Diff line number Diff line change
Expand Up @@ -1300,7 +1300,7 @@
/* Editable profile settings + Danger Zone (#57). */
.m-settings-form { display: flex; flex-direction: column; gap: 16px; max-width: 440px; }
.m-select { padding: 10px 12px; border: 1.5px solid var(--neutral-line); font-family: var(--font-body); font-size: 14px; background: var(--color-surface); }
.m-field-hint { font-size: 11px; }
.m-field-hint { font-size: 11px; color: var(--text-muted); margin-top: 4px; }
.m-field-err { font-size: 11px; color: #b42318; }
/* #479: advisory (never blocking) name-collision notice — amber, distinct from the red m-field-err. */
.m-field-warn { font-size: 11px; color: #93650a; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
Expand Down
1 change: 1 addition & 0 deletions components/build/screens/Auth.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -741,6 +741,7 @@ export function Auth({ mode }: { mode: Extract<Screen, 'login' | 'signup' | 'for
onChange={(e) => setPrimaryPhone(e.target.value)}
placeholder="(512) 555-1234"
/>
<p className="m-field-hint">We&apos;ll text you a one-time code to verify this number.</p>
</label>
{phoneFormError && <p className="m-auth-error">{phoneFormError}</p>}
{mode === 'signup' && (
Expand Down
19 changes: 14 additions & 5 deletions lib/build/otp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -262,11 +262,20 @@ export interface SharedSmsResult {
* credential ever existed). Builder's own Railway service now holds a
* direct Twilio credential (TWILIO_ACCOUNT_SID/TWILIO_AUTH_TOKEN), copied
* from core's real, working Twilio account on 2026-10-05, and
* TWILIO_OTP_FROM_NUMBER is the real, confirmed-live ZeroVoice number
* (+19377642838) already wired for two-way SMS. Explicit From/To (never
* routed through a Messaging Service's number-selection) — using a
* MessagingServiceSid here produced a confusing same-number From/To
* collision during live testing earlier this session.
* TWILIO_OTP_FROM_NUMBER is a Builder-owned number (+19377642838) already
* wired for two-way SMS. Explicit From/To (never routed through a
* Messaging Service's number-selection) — using a MessagingServiceSid here
* produced a confusing same-number From/To collision during live testing
* earlier this session.
*
* #944 follow-up (2026-10-07): this number's live A2P 10DLC campaign was
* registered under ZeroVoice's branding/use-case (CUSTOMER_CARE, message
* samples referencing ZeroVoice by name), not Builder's — which is why
* carriers are currently blocking sends (core#8533, error 30034/30896).
* A second Builder-owned number (+18313183353) has the same problem. Both
* need their own 2FA-use-case campaigns resubmitted under Builder's own
* branding/URL, with no ZeroVoice references — tracked in core#8533, a
* Twilio-console task, not a code change.
*/
export async function sendSharedSms(toE164Number: string, body: string): Promise<SharedSmsResult> {
const accountSid = process.env.TWILIO_ACCOUNT_SID || ''
Expand Down
Loading