Routing scorecard
routing_scorecardMeasures which model tier should run each ticket size by scoring Done tickets: median cost, cycle time, rework, cost per clean ticket per tier/effort. Flags tiers with insufficient data, not guesses.
Instructions
Which model tier should actually run your tickets, measured instead of guessed (FBMCPF-351). Scores every Done ticket from data the board already keeps — work-log tokens + model, ticket_events status transitions, and bugs filed with ref: — and reports, per tier: closed tickets, median tokens, median $ cost, median cycle time (In Progress -> Done), rework rate (reopened, or a follow-up bug filed after close-out), and the headline COST PER CLEAN TICKET (dollars per ticket that stayed closed). Cross-cut by effort:low/medium/high so the answer is 'which tier for THIS size of ticket', not one global average. A tier with fewer than minSamples closed tickets gets NO verdict — the readout says 'insufficient data' with the sample count rather than guessing. Advice only: it never writes a model:/cap: label, so intake stays deterministic. Pair with plan_budget (what the queue will cost) and daily_plan (what to run today). Returns the per-tier and per-effort STATS by default; the per-ticket evidence rows are opt-in via includeRows (a mature board has hundreds and they blow the result cap).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project | Yes | ||
| rowLimit | No | Max rows when includeRows is on, worst-first (rework, then costliest). Default 200. | |
| minSamples | No | Closed tickets a tier needs before it earns a verdict (default 3). | |
| windowDays | No | Only score tickets completed in the last N days (default: all history). Advice from an older model generation is worse than none. | |
| includeRows | No | Include the per-ticket evidence rows. Off by default — every Done ticket is a row, so this can be hundreds of entries; the stats are computed from all of them regardless. |