One back-link that resolves, instead of four that never did

Fixkamo-internal
Shipped
August 27, 2026 at 5:02 PM UTC
Author
kamo
Commit
11087dc

Every service screen's back button was `/commerce?tab=service`. There has never been a tab with that id: `PipelineView.tsx:69-70` builds them as `market-${market.id}`, and `:87-88` resolves `?tab=` with a `findIndex` that falls back to index 0 on a miss. So "back" has always landed on whichever market sorts first by `displayOrder`, and dropped `?sub=` as well. It never threw and it never logged, which is why it survived. All four now call `commerceBackHref`, and all four pass no market — because there is no market to pass. `ServiceJobApi.JobView` does not carry a `marketUid` and cannot without DDL: `ServiceJob` has no market column and neither does `Engagement`, and `ServiceQuoteDTO` has none either. A bare `/commerce` is honestly "the pipeline"; `market-<whichever>` would claim a precision the record does not have. The helper takes an optional market id so that the day one is genuinely reachable the fix is an argument, not a fifth hard-coded string. The labels are renamed with the destination. "Back to Service" describing a link to the pipeline is the same lie one layer up, and an English value changed under an unchanged key leaves every other locale holding the old translation — so `backToService` becomes `backToPipeline` and the detail page's bare `backLabel` becomes `pipelineLabel`. The guard is a source scan, because that is the only place the defect was ever visible: a literal that was never rendered on the path a runtime test drives. Comments are stripped first so the two module notes may quote the broken form they replaced, and the regex is pinned against `/settings/features/docs`, whose `?tab=service-application` and `?tab=service-order` are real tabs.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing