- 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.