Architecture cleanup. Removes the legacy DELETE /admin/tenants/:id/cafe-config
endpoint that hard-deleted the row (Starter-safe, NOT Pro-safe) and the dead Vue
function that referenced it. Slice P (2026-05-19) had already shipped
POST /unlink-pause as the Pro-safe alternative and the Cpanel UI was
already calling it; the DELETE endpoint was a foot-gun for any external caller.
nix-outdoor-sales-backend/src/admin/cafe.config.router.ts — removed the entire router.delete('/') block (~15 LOC) and the 'cafe_config.deleted' audit event. Header docblock no longer advertises the DELETE route; new note explaining the U12 removal and pointing future hard-delete needs at a fresh /purge endpoint (not in this slice).nix-outdoor-sales-admin/src/views/TenantDetailView.vue — removed the dead deleteCafeConfig async function (which still wrapped the now-removed DELETE call). The Unlink button at line 622 already calls pauseCafeConfig; no template change. Comment block on pauseCafeConfig updated to mention the U12 cleanup.Surviving Pro-safe path unchanged: POST /admin/tenants/:id/cafe-config/unlink-pause clears Odoo creds + flips masters→cafe + sets bypassOdooPos=true + KEEPS row. Audit event cafe_config.unlinked_paused.
| ✓ | Backend: router.delete('/') block removed; router.post('/unlink-pause') still present |
| ✓ | Backend: header docblock no longer lists the DELETE route; contains U12 removal note + /unlink-pause reference |
| ✓ | Backend: 'cafe_config.deleted' audit event string gone; 'cafe_config.unlinked_paused' retained |
| ✓ | Backend: /unlink-pause still clears all 4 Odoo creds + flips all 3 masters to 'cafe' + sets bypass_odoo_pos: true |
| ✓ | Vue: deleteCafeConfig function removed; no leftover apiClient.delete(...cafe-config) call |
| ✓ | Vue: "Unlink Odoo" button still wired to pauseCafeConfig; function POSTs to /unlink-pause |
| ✓ | Vue: pauseCafeConfig docblock mentions U12 cleanup ("removed the legacy deleteCafeConfig companion that hard-deleted the row") |
Backend typecheck: npx tsc --noEmit → 0 errors. Vue project has no vue-tsc in devDeps; relied on the Vue template grep that confirms the only remaining reference is the active pauseCafeConfig handler.
/unlink-pause exactly as before; the row stays with cleared creds + masters→cafe + bypassOdooPos=true. The OdooUnlinkedBanner component on Settings / Dashboard / Reports already renders behind !tenant.odooLinked./purge endpoint with explicit confirmation. Not in U12 scope.test-u12-prod.mjs: anonymous probe of DELETE /admin/tenants/:id/cafe-config returns 404 (endpoint gone); POST /unlink-pause still returns 401 (auth gate intact) for an unauthenticated probe.