Quality pass · NakKirim

6 things to fix, and how

26 October 2026 · built from main @ 4a8268e
Run on a clean local copy — no real accounts, no real messages.
514 checks 6 to review No crashes

What needs a decision

1

The 3-trip cap can be dodged with a second account

Fixed

Four accounts sharing one phone number each posted a live trip — all four accepted (200/200/200/200). The cap counts accounts, and the phone number is never checked.

Why it matters: that cap is the only thing stopping one person from filling the board; signing up is free and the phone is unverified.

Suggested fix Store the phone normalised (phone_norm, already planned in #246) and count live trips per phone, not per account. Refuse the fourth with the same wording the cap uses today.

Fixed on wt/qa-26oct — the cap now counts the phone number (phone_norm / whatsapp_norm) across accounts, with test/phone-cap.test.ts.

2

Two accounts on one number never reach the admin

Needs a decision

Signed up twice with the same number; the admin queue stays silent. The "let it through" half of #246 is built — the "tell the admin" half is not.

Suggested fix One queue line per shared number, linking both profiles, as #246 already describes.

Correction: the queue does flag numbers, but only when one side is suspended (decision 44). Whether it should flag every shared number is your call.

3

The fee can be raised after a buyer has asked

Needs a decision

A trip at 10% received an ask, then the fee went to 60% and the change was accepted. The buyer is alerted — but their open ask stays open at the old terms.

Why it matters: the fee is the number the buyer agreed to; changing it under an open ask is a bait-and-switch, even with a notice.

Suggested fix Refuse a fee change while any thread on that trip is open (the code already protects dates that way), or requote and require the buyer to accept again.

Correction: the fee is already locked once a deal is accepted (tripHoldsFee). Only an open ask leaves it free — should it lock that too?

4

Ending a trip with an accepted deal is allowed

Needs a decision

Traveller accepted a deal, then ended the trip — accepted. The buyer keeps the thread, but the traveller walks away with no mark on their profile.

Suggested fix Either refuse while a deal is accepted, or keep the end and write "ended after accepting" onto the profile so the next buyer sees it.

Correction: the accepted deal survives the end (tripEndCloseStatement closes only untouched asks). The open question is whether the profile should show it.

5

Three Malay strings will break the page

Fixed

The Malay file loses placeholders and plural branches on three keys, so a raw {c} or a missing count can show on the page:

admin.photoCount · trip.ratings · profile.bar

Suggested fix Translator's fix in ms.ts — each of those needs the same placeholders and the same two branches as the English line.

Fixed in ms.ts, plus test/ui-locales.test.ts so a lost placeholder or branch fails the build from now on.

6

Three alert lines are too long for a phone

Fixed

how.step2.b (222 characters), event.alert.suspended (240), event.alert.suspendedReason (259). One alert row that long pushes everything else off a 375px screen.

Shortened in api_events.ts and both locale files: longest is now 200 characters, from 259.

Checked and clean

What the board looks like today

Board on a phone, English
Board, phone, English
Post a trip, step 1, on a phone
Post a trip, phone, English