diff --git a/apps/docs/tests/research.test.ts b/apps/docs/tests/research.test.ts index 95c0285..9ddad38 100644 --- a/apps/docs/tests/research.test.ts +++ b/apps/docs/tests/research.test.ts @@ -279,9 +279,15 @@ test("ambiguous ARR claims retain currency, precision and attribution limits", ( const portfolio = snapshot.observations.filter((o) => o.company === "AI100"); assert.deepEqual(portfolio.filter((o) => o.selection === "signal").map((o) => o.id), ["SR25-O-DRS-PORTFOLIO"], "a product milestone must not be added to its company portfolio as another company"); - assert.ok(snapshot.observations.filter((o) => o.id.startsWith("SR25-O-")).every((o) => - o.unit !== "USD" && !o.metric && !o.observedAt && o.comparisonGroup === null), + const speedrun2025 = snapshot.observations.filter((o) => o.id.startsWith("SR25-O-")); + assert.ok(speedrun2025.every((o) => + o.unit !== "USD" && !o.observedAt && o.comparisonGroup === null), "access dates and dollar symbols must not invent dated USD income samples"); + assert.deepEqual(speedrun2025.filter((o) => o.metric).map((o) => [o.id, o.metric]).sort(), + [["SR25-O-DRS-PORTFOLIO", "arr"], ["SR25-O-LOOPS-ARR", "arr"]], + "explicit company ARR claims retain their metric without inferring currency or reporting dates"); + assert.ok(platformIncomeSample(snapshot, { windowDays: null }).points.every((point) => + !point.observation.id.startsWith("SR25-O-")), "undated ARR claims never enter platform MRR comparisons"); }); // Retractions and forecasts must stay visible for review without becoming revenue signals.