import { installDom } from "./dom.ts";
import { createRequire } from "node:module";
import assert from "node:assert/strict";
import { test } from "node:test";
import { createElement } from "react";
import { renderToStaticMarkup } from "react-dom/server";
import { TooltipProvider } from "@cloudflare/kumo";
import { ownerNeeds } from "../src/needs-you-model.ts";
import { mountDashboard } from "../src/dashboard.ts";
import { createHttpTransport } from "../src/transport.ts";
import { reviewGate, stateView } from "../src/model.ts";
import {
agentUsageToday,
laneUsage,
tokenNumber,
totalTokens,
usageTooltip,
} from "../src/usage.ts";
import { BudgetUsage, UsageFigures } from "../src/usage.tsx";
import type { StateResponse } from "../src/contracts.ts";
import { usageFixtureState, usageFixtureDetail } from "./usage-fixtures.ts";
const brand = { name: "Fixture product", tagline: "Fixture" };
const { JSDOM } = createRequire(import.meta.url)("jsdom");
const now = Date.parse("2026-10-13T16:00:00Z");
const fixture = (id = "usage-race") => stateView(usageFixtureState(id, now));
async function until(fn: () => unknown) {
for (let i = 0; i < 300; i++) {
if (fn()) return;
await new Promise((r) => setTimeout(r, 5));
}
assert.fail("Usage DOM did not settle");
}
function setup(scenario = "usage-race", route = "#race/FH-040", owner = true, noDetail = false, amend?: (wire: StateResponse) => void) {
const dom = new JSDOM('
', {
url: `https://fixture.idiot.tax/${route}`,
});
installDom(dom.window);
const root = dom.window.document.getElementById("dashboard")! as HTMLElement;
const wire = usageFixtureState(scenario);
amend?.(wire);
const calls: { url: URL; method: string }[] = [];
const transport = createHttpTransport({
origin: "https://fixture.idiot.tax",
fetch: async (input, init) => {
const url = new URL(String(input));
calls.push({ url, method: init?.method ?? "GET" });
if (url.pathname.endsWith("/state")) return Response.json(wire);
if (url.pathname.endsWith("/activity")) return Response.json({ activity: [], nextAfter: 0 });
return Response.json(
usageFixtureDetail(wire, decodeURIComponent(url.pathname.split("/").at(-1)!)),
);
},
});
if (noDetail) delete transport.getReview;
const app = mountDashboard(root, {
brand,
fixture: true,
owner,
agent: "fixture-agent",
initialProject: scenario,
projects: [{ id: scenario, label: "Usage fixture" }],
transport,
});
return {
dom,
root,
wire,
calls,
close() {
app.dispose();
dom.window.close();
},
};
}
test("token formatting stays exact under 100k; sources, model and missing reports stay explicit", () => {
assert.deepEqual([0, 18400, 99999, 100000, 340000, 1200000].map(tokenNumber), [
"0",
"18,400",
"99,999",
"100k",
"340k",
"1.2M",
]);
const state = fixture("usage-both");
const usage = state.reviews[0].usageAtReview!;
assert.equal(
usageTooltip(usage.reported!, "fixture-agent", brand),
"Reported by fixture-agent through Fixture product. Fixture product can't verify it.",
);
assert.equal(
usageTooltip(usage.metered!, "fixture-agent", brand),
"Metered by AI Gateway for fixture-agent.",
);
const markup = renderToStaticMarkup(
createElement(
TooltipProvider,
null,
createElement(UsageFigures, { usage, agent: "fixture-agent", brand, split: true }),
),
);
assert.match(markup, /reported/);
assert.match(markup, /metered/);
assert.match(markup, /fixture-model \(reported\)/);
assert.match(markup, /as of/);
assert.doesNotMatch(markup, /670k/);
assert.match(
renderToStaticMarkup(createElement(UsageFigures, { agent: "fixture-agent", brand })),
/Not reported/,
);
});
test("promotion follows current entrant state rather than the older review snapshot, for owner and queue", () => {
const state = fixture();
const r = state.reviews[2];
r.usageAtReview = state.reviews[0].usageAtReview;
assert.equal(reviewGate(r, state).promote, false);
assert.equal(
reviewGate(r, state).reason,
"Over its token budget (reported). It can't win this race.",
);
state.races![0].entrants[2].budget = "within";
assert.equal(reviewGate(r, state).promote, true);
state.races![0].entrants[2].budget = "unchecked";
assert.equal(reviewGate(r, state).reason, "Report usage first: this race has a token budget.");
state.races![0].tokenBudget = null;
assert.equal(reviewGate(r, state).promote, true);
assert.equal(
reviewGate(fixture("usage-legacy").reviews[0], fixture("usage-legacy")).promote,
true,
);
});
test("accepted collision gating remains ahead of current entrant usage gating for both roles", () => {
const state = fixture();
const review = state.reviews[2];
const blocker = {
id: "usage-collision", agent: review.agent, pushingAgent: review.agent,
claimingAgent: "claiming-agent", packet: "claimed-packet", pushingPacket: review.packet,
repoName: review.repoName, sha: review.sha, paths: ["src/shared.ts"],
reason: "Fixture collision", resolved: false,
};
state.blockers.push(blocker);
for (const owner of [true, false]) {
const gate = reviewGate(review, state, owner);
assert.equal(gate.approve, false);
assert.equal(gate.promote, false);
assert.match(gate.reason, /Blocked: this fork pushed into claimed-packet/);
assert.ok(gate.reason.includes(owner ? "Mark the collision resolved first." : "Waiting for the owner."));
}
blocker.resolved = true;
assert.equal(reviewGate(review, state).reason, "Over its token budget (reported). It can't win this race.");
state.races![0].entrants[2].budget = "unchecked";
assert.equal(reviewGate(review, state).promote, false);
assert.equal(reviewGate(review, state).reason, "Report usage first: this race has a token budget.");
state.races![0].tokenBudget = null;
assert.equal(reviewGate(review, state).promote, true);
});
test("today totals deduplicate claims, race entrants and superseded review snapshots by binding and source", () => {
const state = fixture("usage-both");
const r = state.reviews[0];
state.reviews.push({
...r,
id: "older",
usageAtReview: {
reported: { ...r.usageAtReview!.reported!, inputTokens: 1000, at: "2026-10-13T08:00:00Z" },
metered: null,
},
});
let totals = agentUsageToday(state, r.agent, now);
assert.equal(totalTokens(totals.reported!), 420000);
assert.equal(totalTokens(totals.metered!), 250000);
const yesterday = {
reported: { ...r.usageAtReview!.reported!, at: "2026-10-11T16:00:00Z" },
metered: null,
};
state.reviews.push({
...r,
id: "yesterday",
packet: "other",
repoName: "other",
usageAtReview: yesterday,
});
totals = agentUsageToday(state, r.agent, now);
assert.equal(totalTokens(totals.reported!), 420000);
assert.deepEqual(agentUsageToday(state, "unreported", now), { reported: null, metered: null });
state.reviews.push({
...r,
id: "second-packet",
packet: "second",
usageAtReview: r.usageAtReview,
});
assert.equal(totalTokens(agentUsageToday(state, r.agent, now).reported!), 840000);
});
test("graph historical promotion uses its snapshot while the active lane uses current usage", () => {
const state = fixture();
const r = state.reviews[0];
const live = state.races![0].entrants[0].usage!;
live.reported!.inputTokens += 100;
assert.equal(laneUsage(state, { packet: r.packet, repoName: r.repoName, review: r }), live);
assert.equal(
laneUsage(state, { packet: r.packet, repoName: r.repoName, review: r, promoted: {} }),
r.usageAtReview,
);
});
test("race Compare is factual and read-only for both roles, with true ratio meters and detail-backed file counts", async () => {
for (const owner of [true, false]) {
const c = setup("usage-race", "#race/FH-040", owner);
try {
await until(
() =>
c.root.querySelector(".race-compare")?.textContent?.includes("fewest") &&
c.calls.filter((call) => call.url.pathname.includes("/reviews/")).length === 3,
);
const meters = [...c.root.querySelectorAll(".race-track meter")];
assert.deepEqual(
meters.map((m) => [m.value, m.max]),
[
[420000, 1000000],
[820000, 1000000],
[1000000, 1000000],
],
);
assert.match(c.root.textContent!, /1.1M \/ 1M tokens · reported/);
assert.match(c.root.textContent!, /Near budget/);
assert.match(c.root.textContent!, /Over budget/);
assert.match(
c.root.querySelector(".race-compare")!.textContent!,
/Time to Approved.*Time to Promoted.*Checks passed.*Files changed.*Tokens/s,
);
// This fixture begins loading at first push, after every claim.
assert.doesNotMatch(c.root.querySelector(".race-compare")!.textContent!, /Recorded pushes/);
assert.equal(c.root.querySelector('.race-results [data-label="Pushes"]'), null);
assert.doesNotMatch(
c.root.querySelector(".race-compare")!.textContent!,
/score|cost|rank|winner/i,
);
assert.equal(
c.calls.some((call) => call.method !== "GET"),
false,
);
} finally {
c.close();
}
}
});
test("queue Tokens column is conditional; over and unchecked hide Promote in queue and detail", async () => {
for (const [scenario, id, caption] of [
["usage-over", "usage-review-2", "Over its token budget (reported). It can't win this race."],
["usage-unchecked", "usage-review-0", "Report usage first: this race has a token budget."],
]) {
for (const route of ["#review", `#review/${id}`]) {
const c = setup(scenario, route);
try {
await until(() => c.root.querySelector(".usage-promotion-caption"));
const scope =
route === "#review"
? [...c.root.querySelectorAll(".review-card")].find(
(r) => r.querySelector(`[data-review="${id}"]`) || r.textContent!.includes(caption),
)!
: c.root.querySelector(".review-detail")!;
assert.ok(scope.textContent!.includes(caption));
assert.equal(scope.querySelector('[data-action="promote"]'), null);
if (route === "#review") {
assert.equal(scope.textContent!.split(caption).length - 1, 1);
assert.equal(scope.querySelectorAll(".usage-promotion-caption").length, 1);
assert.doesNotMatch(scope.querySelectorAll("td")[3].textContent!, /Report usage first|Over its token budget/);
assert.equal(scope.querySelector(".column-tokens .usage-freshness"), null);
}
if (route !== "#review") {
assert.match(scope.textContent!, /Usage.*Tokens to this review/s);
assert.equal(scope.querySelectorAll(".review-milestone").length, 3);
}
assert.equal(
c.calls.some((call) => call.method !== "GET"),
false,
);
} finally {
c.close();
}
}
}
const c = setup("usage-legacy", "#review");
try {
await until(() => c.root.querySelector(".review-card"));
assert.equal(!!c.root.querySelector(".table-review .column-tokens"), false);
} finally {
c.close();
}
});
test("both sources stay separate in race budget and agent totals; unchecked and missing detail are explicit", async () => {
const c = setup("usage-both", "#agents");
try {
await until(() => c.root.querySelector(".table-agents"));
const row = c.root.querySelector(".table-agents tbody tr")!;
assert.match(row.textContent!, /420k tokens · reported/);
assert.match(row.textContent!, /250k tokens · metered/);
assert.doesNotMatch(row.textContent!, /670k/);
assert.match(c.root.textContent!, /do not measure tokens consumed today/);
} finally {
c.close();
}
const u = setup("usage-unchecked", "#race/FH-040", false, true);
try {
await until(() => u.root.querySelector(".race-compare"));
assert.match(u.root.textContent!, /Budget unchecked/);
assert.match(u.root.textContent!, /Not reported/);
assert.match(u.root.textContent!, /Unavailable/);
} finally {
u.close();
}
});
test("Compare distinguishes an entrant without a review from a host without review detail", async () => {
for (const [scenario, noDetail, expected] of [
["usage-no-review", false, ["4", "4", "No review yet"]],
["usage-race", true, ["Unavailable", "Unavailable", "Unavailable"]],
] as const) {
const c = setup(scenario, "#race/FH-040", true, noDetail);
try {
await until(() => {
const row = [...c.root.querySelectorAll(".race-compare tbody tr")]
.find((r) => r.querySelector("th")?.textContent === "Files changed");
return row && [...row.querySelectorAll(".compare-value")]
.every((cell, i) => cell.textContent === expected[i]);
});
const row = [...c.root.querySelectorAll(".race-compare tbody tr")]
.find((r) => r.querySelector("th")?.textContent === "Files changed")!;
assert.deepEqual([...row.querySelectorAll(".compare-value")].map((cell) => cell.textContent), expected);
assert.equal(c.calls.filter((call) => call.url.pathname.includes("/reviews/")).length, noDetail ? 0 : 2);
assert.equal(c.calls.some((call) => call.method !== "GET"), false);
} finally {
c.close();
}
}
});
test("fork graph keeps tokens in tooltip and table, without figures on lane labels", async () => {
const c = setup("usage-race", "#overview");
try {
await until(() => c.root.querySelector(".fork-lane-label"));
const label = c.root.querySelector(".fork-lane-label")!;
assert.doesNotMatch(label.textContent!, /tokens|reported/);
assert.match(label.getAttribute("title")!, /^Tokens: 420k · reported · as of/);
assert.match(label.getAttribute("title")!, /can't verify it/);
assert.match(
c.root.querySelector(".fork-table-wrap")?.textContent ??
c.root.querySelector(".fork-card")!.textContent!,
/Tokens/,
);
assert.match(c.root.querySelector(".fork-card")!.textContent!, /420k reported/);
const table = c.root.querySelector(".fork-table")!;
assert.equal(table.querySelector(".usage-figure")!.getAttribute("tabindex"), "-1");
assert.match(table.querySelector(".usage-figure")!.getAttribute("aria-label")!, /420,000 tokens: 400,000 in · 20,000 out · reported · fixture-model \(reported\) · as of/);
assert.equal(table.style.clipPath, "inset(50%)");
assert.ok([...table.querySelectorAll("button")].every((button) => button.tabIndex === -1));
c.root.querySelector(".fork-disclosure")!.click();
await until(() => table.style.clipPath === "");
assert.ok([...table.querySelectorAll("button")].every((button) => button.tabIndex === 0));
assert.match(table.textContent!, /420k reported/);
assert.equal(table.querySelector(".usage-figure")!.getAttribute("tabindex"), "0");
} finally {
c.close();
}
});
test("budget boundary labels come from core and the gauge selects metered before reported", () => {
const usage = fixture().races![0].entrants[0].usage!;
for (const [total, status, label] of [
[0, "within", "Within budget"],
[799999, "within", "Within budget"],
[800000, "near", "Near budget"],
[1000000, "near", "Near budget"],
[1000001, "over", "Over budget"],
] as const) {
usage.reported!.inputTokens = total;
usage.reported!.outputTokens = 0;
const html = renderToStaticMarkup(
createElement(
TooltipProvider,
null,
createElement(BudgetUsage, {
usage,
budget: 1000000,
status,
agent: "fixture-agent",
brand,
}),
),
);
assert.ok(html.includes(label));
assert.ok(html.includes(`value="${total}"`));
assert.ok(html.includes(`${total.toLocaleString("en-US")} of 1,000,000 tokens (reported)`));
}
usage.metered = {
inputTokens: 25000,
outputTokens: 0,
at: usage.reported!.at,
source: "metered",
};
const html = renderToStaticMarkup(
createElement(
TooltipProvider,
null,
createElement(BudgetUsage, {
usage,
budget: 1000000,
status: "within",
agent: "fixture-agent",
brand,
}),
),
);
assert.match(html, /value="25000"/);
assert.match(html, /25,000 \/ 1M tokens · metered/);
assert.match(html, /1M \/ 1M tokens · reported/s);
});
test("automatic budget rejection creates no new Needs you item and removes the existing Promote need", () => {
const state = fixture("usage-unchecked");
const items = ownerNeeds(state, brand, now);
assert.deepEqual(
items.filter((item) => item.kind === "promote").map((item) => item.id),
["promote:usage-review-1"],
);
assert.equal(
items.some((item) => /budget|usage/.test(item.kind)),
false,
);
});
test("agent review detail explains automatic rejection without owner controls", async () => {
const c = setup("usage-over", "#review/usage-review-2", false);
try {
await until(() => c.root.querySelector(".review-detail .usage-promotion-caption"));
assert.match(
c.root.querySelector(".review-detail")!.textContent!,
/Over its token budget \(reported\). It can't win this race\./,
);
assert.equal(!!c.root.querySelector(".review-detail [data-action]"), false);
assert.equal(
c.calls.some((call) => call.method !== "GET"),
false,
);
} finally {
c.close();
}
});
test("core unchecked state on an unbudgeted race shows Not reported and keeps Promote", async () => {
const race = setup("usage-unbudgeted", "#race/FH-040");
try {
await until(() => !!race.root.querySelector(".race-track"));
assert.equal(!!race.root.querySelector(".race-track meter"), false);
assert.equal(
race.root.querySelector(".race-track")!.textContent!.includes("Budget unchecked"),
false,
);
assert.match(race.root.querySelector(".race-track")!.textContent!, /Not reported/);
} finally {
race.close();
}
const review = setup("usage-unbudgeted", "#review/usage-review-0");
try {
await until(() => !!review.root.querySelector('.review-detail [data-action="promote"]'));
assert.equal(!!review.root.querySelector(".review-detail .usage-promotion-caption"), false);
assert.equal(
review.calls.some((call) => call.method !== "GET"),
false,
);
} finally {
review.close();
}
});
test("track, Compare, and results share accepted claim order with Tokens before Result", async () => {
const c = setup("usage-reordered", "#race/FH-040");
try {
await until(() => !!c.root.querySelector(".race-compare"));
const track = c.root.querySelector(".race-track")!;
const ordered = ["fixture-agent", "fixture-peer", "fixture-third"];
assert.deepEqual(
[...track.querySelectorAll("tbody tr")].map((row) => row.getAttribute("data-race-agent")),
ordered,
);
assert.deepEqual(
[...c.root.querySelectorAll(".race-compare thead th")].slice(1).map((th) => th.textContent),
ordered,
);
assert.deepEqual(
[...track.querySelectorAll("thead th")].map((th) => th.textContent).slice(-2),
["Tokens", "Result"],
);
assert.deepEqual(
[...c.root.querySelectorAll(".race-results thead th")].map((th) => th.textContent).slice(-2),
["Tokens", "Result"],
);
assert.equal(track.querySelectorAll(".lane-marker-approved").length, 3);
assert.equal(track.querySelectorAll(".lane-marker-review").length, 3);
assert.equal(track.querySelectorAll(".race-mark-box").length, 18);
assert.equal(c.root.querySelector(".race-compare")!.textContent!.includes("25:00.0"), true);
} finally {
c.close();
}
});
test("budget figures appear once per source with separate freshness and no within-budget dot", () => {
const state = fixture("usage-both");
const html = renderToStaticMarkup(createElement(TooltipProvider, null,
createElement(BudgetUsage, { usage: state.races![0].entrants[0].usage, budget: 1000000, status: "within", agent: "fixture-agent", brand }),
));
const dom = new JSDOM(html);
const figures = [...dom.window.document.querySelectorAll(".usage-figure")].map((el) => el.textContent);
assert.deepEqual(figures, ["420k / 1M tokens · reported", "250k / 1M tokens · metered"]);
assert.equal(dom.window.document.querySelectorAll("meter").length, 1);
assert.equal(dom.window.document.querySelector("meter")!.value, 250000);
assert.equal(dom.window.document.querySelector(".token-budget-state")!.textContent, "Within budget");
assert.ok([...dom.window.document.querySelectorAll(".usage-freshness")].every((el) => el.textContent!.startsWith("as of ")));
});
test("Compare and Results count passing receipts rather than checks; full ties have no best caption", async () => {
const c = setup("usage-race", "#race/FH-040", true, false, (wire) => {
const race = wire.races![0];
const r = wire.reviews[0];
// One passed receipt has three passing checks; a second failed receipt makes it 1 of 2.
wire.reviews.push({ ...structuredClone(r), id: "previous-receipt", createdAt: race.entrants[0].claimedAt,
receipt: { ...structuredClone(r.receipt!), status: "failed" } });
for (const e of race.entrants) {
e.approvedAt = race.entrants[0].approvedAt;
e.usage = structuredClone(race.entrants[0].usage);
}
});
try {
await until(() => c.calls.filter((call) => call.url.pathname.includes("/reviews/")).length === 3 &&
[...c.root.querySelectorAll(".race-compare tbody tr")].find((row) => row.querySelector("th")?.textContent === "Files changed")?.textContent?.includes("4"));
const facts = [...c.root.querySelectorAll(".race-compare tbody tr")];
const checks = facts.find((row) => row.querySelector("th")?.textContent === "Checks passed")!;
assert.deepEqual([...checks.querySelectorAll(".compare-value")].map((cell) => cell.textContent), ["1 of 2", "1 of 1", "1 of 1"]);
assert.deepEqual([...c.root.querySelectorAll('.race-results [data-label="Checks passed"]')].map((cell) => cell.textContent), ["1 of 2", "1 of 1", "1 of 1"]);
assert.doesNotMatch(c.root.querySelector(".race-compare")!.textContent!, /fewest|fastest/);
assert.equal(c.root.querySelectorAll(".compare-entrant .race-saddlecloth").length, facts.length * 3);
assert.deepEqual([...facts[0].querySelectorAll(".compare-entrant > span:last-child")].map((el) => el.textContent), ["fixture-agent", "fixture-peer", "fixture-third"]);
} finally { c.close(); }
});