Bugs found during the design review

Findings typed "bug" in the walkthroughs on platform-staging (2026-10-29), split out of preview.html so they can be filed. Nothing here has been posted to a tracker. bugs.csv has the same rows for import (ID, Title, Description, Area, Flow, App, Environment, Screenshot, Status). Source data: reference/*-flow.json.

Design system previewDecisions
SO-001

Create, cargo photos: Uploaded photos overwrite each other

Uploaded photos overwrite each other: all three stored as spot-order/1793245675.png because the S3 key is the upload second. Both roles see photo 3 three times.

Spot Order, end to end · Create, cargo photos · 08-transporter-lightbox
SO-002

Create, pick transporter: Rating not rounded

Rating not rounded: 4.386363636363637 (11).

Spot Order, end to end · Create, pick transporter · 04-shipper-pick-transporter
SO-003

Planner, Pick Driver: Driver search lists drivers from other transporters (Maju Tes) and does not filter...

Driver search lists drivers from other transporters (Maju Tes) and does not filter by the agreed truck type. A Tronton Box was accepted for an order agreed as CDD Box, with no warning.

Spot Order, end to end · Planner, Pick Driver · 19-planner-pick-driver-modal
SO-004

Planner, Pick Driver: Order info shows Name of Item '-' (cargo is Biji Kopi) and Distance Route '- KM'

Order info shows Name of Item '-' (cargo is Biji Kopi) and Distance Route '- KM'.

Spot Order, end to end · Planner, Pick Driver · 19-planner-pick-driver-modal
SO-005

Detail, cancelled order (transporter): A cancelled order still shows the green 'Negosiasi Berhasil!...

A cancelled order still shows the green 'Negosiasi Berhasil! Menunggu konfirmasi & pembayaran' message.

Spot Order, end to end · Detail, cancelled order (transporter) · 38-existing-cancelled-contradiction
SO-006

Detail, shipper: Status 'Pengemudi Ditugaskan' but the tracker already marks step 1 'Menuju Lokasi Muat'...

Status 'Pengemudi Ditugaskan' but the tracker already marks step 1 'Menuju Lokasi Muat' as done.

Spot Order, end to end · Detail, shipper · 43-shipper-ours-driver-assigned
SO-007

Detail, shipper, refunded order: Team card says 'Menunggu Pengemudi Ditugaskan' on an order that is closed...

Team card says 'Menunggu Pengemudi Ditugaskan' on an order that is closed and refunded.

Spot Order, end to end · Detail, shipper, refunded order · 42-shipper-existing-disbursement
SO-008

Ganti Truk, Ganti Armada: At 'Pengemudi Ditugaskan' the dialog lets you search, pick and confirm, then the...

At 'Pengemudi Ditugaskan' the dialog lets you search, pick and confirm, then the server refuses: '400 : Order sudah melewati tahap yang memperbolehkan penggantian driver/truck'. The UI should not offer the action, or should say why before the user fills it in.

Spot Order, end to end · Ganti Truk, Ganti Armada · 46-ganti-truk-server-400-sweetalert
SO-009

Ganti Truk, Ganti Armada: Truck and armada search list every truck type (CDE Box, Trailer Flatbed, CDE Los...

Truck and armada search list every truck type (CDE Box, Trailer Flatbed, CDE Los Bak) for an order agreed as CDD Box, same as Pick Driver.

Spot Order, end to end · Ganti Truk, Ganti Armada · 46-ganti-truk-server-400-sweetalert
SO-010

Shipper Pusat Dokumen: Order is paid, but 'Invoice Pembayaran' and 'Struk Pembayaran' (system...

Order is paid, but 'Invoice Pembayaran' and 'Struk Pembayaran' (system auto-generated) still say 'File belum diupload'.

Spot Order, end to end · Shipper Pusat Dokumen · 52-shipper-docs-invoice-missing
SO-011

Create, step 2: Selanjutnya passes with no truck type selected

Selanjutnya passes with no truck type selected; review shows an empty 'Preferensi Armada'; only the server stops it with '400 : needTrucks (tipe fleet) wajib diisi' (raw API field name) in a SweetAlert over a blank page.

Spot Order, end to end · Create, step 2 · 61-create-no-truck-server-400
SO-012

Create, Foto Muatan: No type check

No type check: a .txt is accepted and shows as a broken image; a PDF is accepted as a 'photo' (the hint lists PDF). 'Dimensi: 600 x 600 pixel' is stated but not checked. Over 5 MB uses a native browser alert() that blocks the page.

Spot Order, end to end · Create, Foto Muatan · 58-create-txt-accepted-broken-image
SO-013

Create, saved address: On a fresh create the saved address dropdown says 'Tidak ada alamat'

On a fresh create the saved address dropdown says 'Tidak ada alamat'; on Buat Ulang Pesanan the same account's saved warehouses are selected.

Spot Order, end to end · Create, saved address · 55-create-recreate-prefilled
SO-014

Negotiation, transporter offer: The transporter can offer below the shipper's own counter (2.500.000...

The transporter can offer below the shipper's own counter (2.500.000 against 3.000.000) with no warning. The check only exists on the shipper side. A help tooltip covers the message field while typing.

Spot Order, end to end · Negotiation, transporter offer
No screenshot
SO-015

Shipper detail, rejected order: Shipper sees 'Order Dibatalkan' with no reason and no mention that the...

Shipper sees 'Order Dibatalkan' with no reason and no mention that the transporter rejected it. The page still shows the delivery stepper, an empty transporter card ('-') and 'Menunggu Pengemudi Ditugaskan'.

Spot Order, end to end · Shipper detail, rejected order · 70-nego-shipper-after-transporter-tolak
SO-016

Negotiation, shipper Tolak: 'Tolak Penawaran Transporter' reads as rejecting one price, but with a single...

'Tolak Penawaran Transporter' reads as rejecting one price, but with a single transporter it cancels the whole order at once ('Order Dibatalkan'); the dialog does not say so. The dialog itself is good: required reason, 'Lainnya' asks for text, confirm disabled until filled.

Spot Order, end to end · Negotiation, shipper Tolak · 72-nego-shipper-after-tolak-cancelled
SO-017

Expiry, both lists: Orders past their deadline (some from July) still show 'Negosiasi' or 'Menunggu...

Orders past their deadline (some from July) still show 'Negosiasi' or 'Menunggu Pembayaran' with 'kadaluarsa dalam 0 jam'. The transporter's 'Order Kadaluarsa (94)' tab lists them, but 18 of its first 20 rows carry a 'Negosiasi' badge, and the 'Negosiasi' tab counts 1. The tab and the badge disagree about the same order.

Spot Order, end to end · Expiry, both lists · 75-list-kadaluarsa-tab-negosiasi-pills
SO-018

Shipper list: The table is 1548 px wide in a 1384 px container

The table is 1548 px wide in a 1384 px container; the 'Status Order' column is clipped to a thin sliver, so no status is readable at a common desktop width.

Spot Order, end to end · Shipper list · 77-list-shipper-status-column-clipped
SO-019

Shipper Konfirmasi Penerimaan: Both orders at 'Konfirmasi Penerimaan' show 'Waktu habis..

Both orders at 'Konfirmasi Penerimaan' show 'Waktu habis... otomatis selesai dalam: 0 Hari' since August and still offer 'Konfirmasi Order Selesai'; confirming returns '400 : Order sudah difinalisasi'. UI and server disagree on the status; the auto-finish never ran. 'Waktu Selesai Bongkar' (3 Aug) is before 'Jadwal Muat' (8 Aug).

Spot Order, end to end · Shipper Konfirmasi Penerimaan · 79-shipper-konfirmasi-400-already-final
SO-020

E-POD verification: 'Tolak' rejects the E-POD at once

'Tolak' rejects the E-POD at once: no confirm, no reason, cannot be undone from the web. The next modal has no close button. Entering a quantity that differs from plan and loading (140 vs 150) gives no warning.

Spot Order, end to end · E-POD verification · 81-epod-tolak-no-confirm
SO-021

Auto-cancel: ORM261029690002 (driver assigned) was cancelled by the system at 13.23 as 'Order Cancelled by...

ORM261029690002 (driver assigned) was cancelled by the system at 13.23 as 'Order Cancelled by Inactive Transporter', 3 minutes after geofencing was switched on at 13.20 (logged as PT. Karlo Trans manager, not this review). Neither side got a reason they can act on; the transporter detail jumps back to the negotiation view.

Spot Order, end to end · Auto-cancel · 83-auto-cancel-inactive-transporter
SO-022

Server errors: When the list request fails, the shipper list shows the same red 'Data not found' as an...

When the list request fails, the shipper list shows the same red 'Data not found' as an empty search, with the tab still saying 'Negosiasi (41)'. No error message, no retry.

Spot Order, end to end · Server errors · 87-server-error-shown-as-not-found
SO-023

Create, transporter picker: The picker matches transporters on fleet (loading city and truck type), not on...

The picker matches transporters on fleet (loading city and truck type), not on Harga Layanan. Gudang Sejahtera has Jakarta Timur to Tasikmalaya priced for Tronton Box, Wingbox, Bak and Dump but owns no Tronton, so it is silently left out; a transporter can publish prices it can never be picked for, and nothing warns either side.

Spot Order, end to end · Create, transporter picker · 88-create-picker-gudang-sejahtera
SO-024

Create, truck type vs cargo: A 10,000 kg cargo was accepted for a Pickup Box (1 ton, 4 m3) with no warning...

A 10,000 kg cargo was accepted for a Pickup Box (1 ton, 4 m3) with no warning at review or submit.

Spot Order, end to end · Create, truck type vs cargo
No screenshot
SO-025

Confirm and pay modal: The modal names the transporter 'PT Gudang Sejahtera' (from companyProfile,...

The modal names the transporter 'PT Gudang Sejahtera' (from companyProfile, ConfirmPesananModal.jsx:45) while the picker, list and detail say 'Gudang Sejahtera'. One company, two names on the way to payment.

Spot Order, end to end · Confirm and pay modal · 92-shipper-confirm-pay-modal
SO-026

Payment page: Step 5 (Pembayaran) still shows the red negotiation banner 'Negosiasi akan otomatis dibatalkan..

Step 5 (Pembayaran) still shows the red negotiation banner 'Negosiasi akan otomatis dibatalkan... masukkan penawaran terbaik Anda' with a countdown, although the price is agreed and there is nothing to offer.

Spot Order, end to end · Payment page · 93-payment-method-stale-nego-banner
SO-027

Payment, VA instructions: Copy issues next to the VA

Copy issues next to the VA: 'virtual acccount' (three c), the mobile banking steps show the template placeholder 'PT [Nama Perusahaan]/Karlo', and the VA field keeps the placeholder 'Pilih jenis bank dahulu' as its accessible name after the VA is shown.

Spot Order, end to end · Payment, VA instructions · 96-payment-va-created
SO-028

Planner, Pick Driver modal: 'Harga / KG' shows Rp 2.000.000, which is the total agreed price, not a price...

'Harga / KG' shows Rp 2.000.000, which is the total agreed price, not a price per kg. 'Distance Route' shows '- KM' and 'Fleet Recommendation' is empty for a Spot Order.

Spot Order, end to end · Planner, Pick Driver modal · 102-planner-pick-driver-gs3name
SO-029

Lists, Export Excel: Export Excel works and contains only the selected rows (checked

Export Excel works and contains only the selected rows (checked: 2 rows, 9 columns). 'Batas Waktu' still has a deadline for a cancelled order (ORM261029740005) and for an order whose driver is assigned (ORM261029260006); the list column shows the same live countdown.

Spot Order, end to end · Lists, Export Excel
No screenshot
SO-030

Lists, Export PDF: 'Export PDF' does not download a PDF

'Export PDF' does not download a PDF: it opens the browser print dialog from a hidden iframe (src/utils/printHTML.js:30). The user has to pick 'Save as PDF' themselves, and the dialog blocks the page (it also blocked browser automation).

Spot Order, end to end · Lists, Export PDF
No screenshot
SO-031

E-POD re-report (driver app): After Tolak the driver can only change photos

After Tolak the driver can only change photos: the 'kargo sesuai / tidak sesuai' answer stays 'tidak sesuai' and cannot be changed. The transporter gets the same mismatch toast again, so a mismatch flag can never be cleared by the driver.

Spot Order, end to end · E-POD re-report (driver app) · 112-epod-muat-rereport-same-mismatch
SO-032

Driver app, POD photos: 'Tambah Foto' offers Galeri next to Kamera, so a driver can submit any old picture...

'Tambah Foto' offers Galeri next to Kamera, so a driver can submit any old picture as the unloading Surat Jalan and Muatan photo (tested with two generated images; accepted and shown to the transporter).

Spot Order, end to end · Driver app, POD photos · 117-driver-app-kamera-galeri
SO-033

Driver app, POD watermark: The photo watermark uses the phone's current location

The photo watermark uses the phone's current location: an unloading photo for Gudang Review Tasik (Tasikmalaya) is stamped 'DKI JAKARTA || KOTA JAKARTA PUSAT || ... Bongkar || Gudang Review Tasik'. With geofencing off nothing flags the mismatch.

Spot Order, end to end · Driver app, POD watermark · 118-driver-app-watermark-location
ON-001

Complete page: A transporter account is told to 'Download K-Shipper' (the shipper app)

A transporter account is told to 'Download K-Shipper' (the shipper app). Typo: 'genggangaman' should be 'genggaman'.

Onboarding, new transporter to verified · Complete page · 09-complete
ON-002

Step order: Review, verify and complete open directly by URL with an empty profile

Review, verify and complete open directly by URL with an empty profile. Complete says 'Terimakasih telah melengkapi profil' although nothing was filled.

Onboarding, new transporter to verified · Step order · 09-complete
ON-003

Onboarding flow: Loop

Loop: Harga Layanan 'Selanjutnya' returns to onboarding home, whose 'Isi armada sekarang' leads back to Harga Layanan. Add Truck is never reached from the flow; only by URL.

Onboarding, new transporter to verified · Onboarding flow · 14-harga-next-without-route
ON-004

Progress stepper: Pages disagree on the current step

Pages disagree on the current step: home shows step 4, Harga Layanan step 3, Add Truck step 5. After the truck is saved, home still shows step 4.

Onboarding, new transporter to verified · Progress stepper · 21-home-after-truck
ON-005

Add Truck: Validation errors stay visible after the field is fixed (photos uploaded, dimensions typed)...

Validation errors stay visible after the field is fixed (photos uploaded, dimensions typed) until the next save. Axle dropdown ignores keyboard input.

Onboarding, new transporter to verified · Add Truck · 19c-add-truck-filled
ON-006

Admin, status change: The status dropdown offers 'Semua Status' (a filter option) as a status to set

The status dropdown offers 'Semua Status' (a filter option) as a status to set. The chosen 'User Terverifikasi' shows as 'Lolos Verifikasi' in the list: one status, two names.

Onboarding, new transporter to verified · Admin, status change · 23-admin-verified-banner
ON-007

Admin transporter list: Row tooltip injects CSS with 'border-radius

Row tooltip injects CSS with 'border-radius: undefinedpx'.

Onboarding, new transporter to verified · Admin transporter list
No screenshot
ON-008

Port settings, port list: Bali port list has 'Nusa Penida' twice and both 'Pelabuhan Benoa' and 'Pelabuhan...

Bali port list has 'Nusa Penida' twice and both 'Pelabuhan Benoa' and 'Pelabuhan Benoa/Denpasar'.

Onboarding, new transporter to verified · Port settings, port list · 28-port-save-confirm
ON-009

Harga Layanan, add route: Adding a route that already exists (Kota Jakarta Pusat to Kota Bandung) saves...

Adding a route that already exists (Kota Jakarta Pusat to Kota Bandung) saves without warning and replaces the existing route's prices: its Trailer Flatbed 40ft price disappeared. The form has no duplicate check (HargaLayanan.jsx validateFormBlock).

Onboarding, new transporter to verified · Harga Layanan, add route · 33-harga-existing-route-overwritten
ON-010

Harga Layanan, truck types: The same truck type can be added twice in one route with two prices (Pickup...

The same truck type can be added twice in one route with two prices (Pickup Box 1.500.000 and 1.700.000); the second select still offers it.

Onboarding, new transporter to verified · Harga Layanan, truck types · 35-harga-same-truck-twice
ON-011

Add Truck, plate: The plate is three boxes that only filter keystrokes

The plate is three boxes that only filter keystrokes; pasted text gets through ('12 ABCD 9!'). The fleet list already holds a truck with plate 'z-99999999999999-z'.

Onboarding, new transporter to verified · Add Truck, plate · 38-fleet-list-bad-plate
ON-012

Add Truck, files: No file type check

No file type check: a .txt is accepted as the STNK photo and shows as a broken image. Size limit is 2 MB here but 5 MB on Spot Order and the documents tab. The oversize message is inline under the field ('File tidak boleh melebihi 2MB'), which is the right pattern.

Onboarding, new transporter to verified · Add Truck, files · 36-truck-txt-accepted-oversize-inline
ON-013

Truck edit: Edit mode does not load the existing truck photos, so saving any change fails with 'Harap...

Edit mode does not load the existing truck photos, so saving any change fails with 'Harap unggah foto tampak depan / belakang ...' until all four photos are uploaded again.

Onboarding, new transporter to verified · Truck edit · 39-truck-edit-requires-photos
ON-014

Profile edit: Clearing Nama Perusahaan and saving scrolls to the field and shows 'Wajib diisi' (text only,...

Clearing Nama Perusahaan and saving scrolls to the field and shows 'Wajib diisi' (text only, no red border). The error stays after the field is filled again. Batal leaves edit mode without asking about unsaved changes.

Onboarding, new transporter to verified · Profile edit · 41-profile-edit-required-error
ON-015

Shipper onboarding, Kembali: Kembali leaves without asking

Kembali leaves without asking. Typed text is kept as a draft, but the uploaded logo is dropped silently.

Onboarding, new transporter to verified · Shipper onboarding, Kembali · 43-shipper-home
ON-016

Shipper onboarding, NIB / NPWP: Format checks are clear ('NIB harus 13 digit angka', 'NPWP harus 15 atau...

Format checks are clear ('NIB harus 13 digit angka', 'NPWP harus 15 atau 16 digit angka') and the tab gets a red dot, but the errors stay after the numbers are fixed, until the next submit.

Onboarding, new transporter to verified · Shipper onboarding, NIB / NPWP · 46-shipper-nib-npwp-format
ON-017

Rejection, transporter side: The banner names the reason ('Nama rekening dan nama pemilik tidak sesuai'),...

The banner names the reason ('Nama rekening dan nama pemilik tidak sesuai'), but the button says 'Isi armada sekarang' and opens Harga Layanan, which shows no reason and step 3 in its stepper. The bank form with the reason is reachable only by typing /onboarding/profile?tab=documents. Shippers get 'Perbaiki Data Anda Sekarang' instead.

Onboarding, new transporter to verified · Rejection, transporter side · 61-transporter-rejected-bank-wrong-cta
ON-018

Admin sheet, transporter: Jenis Layanan shows only 'General Cargo' although the transporter chose General...

Jenis Layanan shows only 'General Cargo' although the transporter chose General Cargo and Cold Chain (both shown on their review page).

Onboarding, new transporter to verified · Admin sheet, transporter · 63-transporter-fix-by-url-only