| ... | @@ -433,7 +433,7 @@ describe("mergeUsage", () => { | ... | @@ -433,7 +433,7 @@ describe("mergeUsage", () => { |
| 433 | const merged = mergeUsage([environment("env-a", decoded)], USAGE_CONTRACT_VERSION); | 433 | const merged = mergeUsage([environment("env-a", decoded)], USAGE_CONTRACT_VERSION); |
| 434 | expect(merged.costUsd).toBe(10); | 434 | expect(merged.costUsd).toBe(10); |
| 435 | expect(merged.totalTokens).toBe(1160); | 435 | expect(merged.totalTokens).toBe(1160); |
| 436 | expect(merged.staleEnvironments).toEqual([]); | 436 | expect(merged.contractMismatches).toEqual([]); |
| 437 | }); | 437 | }); |
| 438 | | 438 | |
| 439 | it("normalizes model names during decoding before grouping usage", () => { | 439 | it("normalizes model names during decoding before grouping usage", () => { |
| ... | @@ -479,7 +479,13 @@ describe("mergeUsage", () => { | ... | @@ -479,7 +479,13 @@ describe("mergeUsage", () => { |
| 479 | ); | 479 | ); |
| 480 | const merged = mergeUsage([environment("env-a", decoded)], USAGE_CONTRACT_VERSION); | 480 | const merged = mergeUsage([environment("env-a", decoded)], USAGE_CONTRACT_VERSION); |
| 481 | expect(merged.costUsd).toBe(0); | 481 | expect(merged.costUsd).toBe(0); |
| 482 | expect(merged.staleEnvironments).toEqual(["env-a"]); | 482 | expect(merged.contractMismatches).toEqual([ |
| | 483 | { |
| | 484 | environmentId: "env-a", |
| | 485 | direction: "clientBehind", |
| | 486 | contractVersion: USAGE_CONTRACT_VERSION + 1, |
| | 487 | }, |
| | 488 | ]); |
| 483 | }); | 489 | }); |
| 484 | | 490 | |
| 485 | it("derives provider shares and cost quality", () => { | 491 | it("derives provider shares and cost quality", () => { |