observe: short `obs run` triage + span-precise locations
obs run printed the full report -- budget, verdict, findings, then every
detail table -- the same output obs report gives offline. Print only the
triage and point at `obs report <id>` for the rest; obs report stays full.
Attribute fibers and suspends to the span active when they ran or blocked,
so the report names where work is stuck instead of bare scheduler ids:
- fibers and the suspend hotspots gain a Where column (the dominant span);
- the sleep wait finding names the polling loop's span and drops the
"batch the syscalls" advice that never fit a timer wait;
- the waiting-fiber finding names where the fiber runs and what it blocks
on, and is suppressed when a named span already explains the wait, so it
stops topping the list with a -100% non-fix.
A fiber's run time is charged only to spans it opened, so one fiber's time
never leaks to a span another left open across a suspend.