O bug está na chave do cache: ela usa só o `sku`, então o preço resolvido para alpha (90) é reaproveitado para beta. A correção é compor a chave com tenant e SKU. Usei `JSON.stringify([tenant, sku])` para evitar colisões de delimitador, e `cache.has` continua protegendo contra valores `undefined`, de modo que consultas repetidas do mesmo par fazem uma única leitura da fonte.

```javascript
import { resolvePrice } from './pricing.js';
export function createCatalog({ globalPrices = { notebook: 100 }, tenantPrices = {} } = {}) {
  let sourceCalls = 0;
  const cache = new Map();
  return {
    getPrice({ tenant, sku }) {
      const key = JSON.stringify([tenant, sku]);
      if (!cache.has(key)) {
        sourceCalls += 1;
        cache.set(key, resolvePrice({ tenant, sku, globalPrices, tenantPrices }));
      }
      return cache.get(key);
    },
    getSourceCalls() { return sourceCalls; },
  };
}
```

Não executei testes; esta é apenas uma proposta para sua revisão e verificação local.
