← All findingssource · memory/project_ask_availability_block.md
Every /ask player answer now carries a server-rendered "— Tonight" block:
game + projected role/minutes (RotoWire via SDS lineups), team injury report,
without-each-absent-teammate splits (with n), and the minutes-conditioned hit
rate at the asked line. src/lib/availability-context{,-core}.ts +
src/components/ask/TonightAvailability.tsx.
Design decisions that must survive edits:
- FACTS AND RATES ONLY, never adjusted projections (beneficiary-style bumps measured worse than nothing). Footer says "Rates, not projections."
- Without-splits join on game_id membership in the teammate's own log (verified: logs carry zero 0-minute rows, so absence = did-not-play). Never a date join, never a name join.
- Tonight's game excluded from every split; pushes excluded from denominators.
- n always shown; n<5 renders "a hint, not a finding".
- Fail-soft: every fetch AND the callsite (
.catch(() => null)) collapse to block-absent; a malformed-200 injury row is dropped, not thrown (3eeb523). - minutesFloor(proj) ≈ proj−3 rounded to {10,15,20,24,28} — the robust substitute for thin without-splits.
The motivating case (2026-08-26): Jade Melbourne o10.5 — page headline showed the pooled 19.2% career rate while Hiedeman was Out and she projected 31 min; at 28+ min she's 12.0 pts / 67% over. The block now shows both. Also the counter-case: Flau'jae Johnson "lighting it up with Hiedeman out" = one 23-pt game next to a 5-pt game, and her minutes are IDENTICAL with/without (28.2/28.2) — no mechanism, no bet. Check the minutes delta first.
Related: project-window-provenance, project_conditional_minutes_refuted, reference-hypothesis-harness, project_analytics_engine