6988ca96b0
Phase 6 graded function starts and left every end to be derived by hand. This adds tools/sf3_extents, which explores all reachable control flow from each hard start (jal/entry) and reports an extent plus how far it can be trusted. Measured decisions, not stylistic ones: - Soft starts are not walk boundaries. A body's second instruction can satisfy the prologue grade exactly (0x800152AC is lw v1,8(gp) / addiu sp,sp,-176, so 0x800152B0 looks like a start). Enforcing soft boundaries stopped 155 of 416 walks inside a real body. - The walk is a full reachability computation, not a first-terminal search: a function whose paths return at different addresses must report the whole body. Grades: exact 1940 (1666 packed, gap=0), fallthrough 256, indirect 73, escape 15, contained 153, standalone 438; 63.8% of the payload covered. Verification: all 12 registered regions reproduce exactly (make extents-verify, now part of make check), 29 new synthetic tests (115 total), byte-identical across two runs, and Ghidra's independent body for FUN_80017ad4 agrees. Two defects were caught by writing the tests first and are recorded: reach had to be an exclusive end, and a terminal j's delay slot must not continue linearly. The table holds addresses, sizes, grades and site addresses only -- no bytes.