Every counting stat below has a KPI on both sides of the matchup, measured on the same denominator: a plate appearance. That is what lets the hitter's reading and the starter's reading be combined instead of listed side by side. The combination is the standard Log5 odds ratio, which is exactly additive in log odds, so the hitter's push and the pitcher's push separate cleanly and the remainder is reported rather than absorbed.
Hits use a derived KPI. Hit rate is not in config/kpi_registry.json: registering it would move the registry hash recorded in the model manifest and fail the live layer closed until a retrain. It is computed with the same strict as-of cutoff and the same shrinkage, stored in its own namespace, and never read by the runtime.
These per-player numbers are measured, not published. The live KPI layer moves team runs and the win probability. The hitter lines in the artifact were then scaled by one club-wide ratio, identical for the leadoff hitter and the ninth bat. The per-hitter columns here are what that single ratio discards.
The whole staff, not only the starter. A hitter takes roughly four in ten of his plate appearances against relievers. Each club's bullpen here is the pregame bullpen: the seven busiest healthy relievers of the last 30 days, the same arms the KPI forecast weighted and the simulation pitched, each sharing the relief work by the batters faced the forecast gave him. The bullpen's workload tonight is the club's real mean staff batters faced minus the starter's projection. The published staff alone holds only the relievers one simulation draw used, so it is shown beside the bullpen for comparison, not used.
Reading a delta. Own skill is measured against the league. The opponent effect is measured against the hitter's own rate, which is the only one that may adjust a published line, because the published line already carries his own skill. Adding both to a published line would count the hitter twice.
Coverage. 0 hitter-versus-starter pairings; 0 have both sides above their sample floor on hits and 0 carry a non-zero hit adjustment. A side below its floor falls back to the league rate and is marked n<floor, which is a stated absence of evidence rather than a measured zero. All four outcome metrics have value documents. Handedness source: model bundle pitcher_hands.json.
No measurable per-player movement on this slate.