Schultz's floor beats Pitts's ceiling. The tier average was hiding it.
What the consensus says
Dynasty TE writing this summer runs two tracks that never talk to each other. Track one loves the "target hog." FantasyPros' trade-target piece singles out Trey McBride for exactly that word, and its TE startup value piece does the same for Chig Okonkwo, praised for "a clear path to targets" on a team with no other proven weapons. Track two chases upside. FantasyPros' rookie TE sleepers/busts/breakouts piece and the Fantasy Footballers' range-of-outcomes piece both frame the position around athletic ceiling, "boom-or-bust," "wide range of outcomes," stash-for-the-spike language.
Both tracks are right about their favorite players. Neither one tells you what to do with the other 20 tight ends sitting outside the top 12, where most dynasty content just shrugs and calls the whole range replaceable.
The claim, in plain English
If "possession floor" is a real signal and not just narrative around a couple of favorite names, it should show up inside target share bands, not just in prose about specific players.
def predicate(row: pd.Series) -> bool:
"""Possession-floor TE: missed at most ~3 of 17 games AND caught at
least two of every three targets thrown his way."""
catch_rate = row["receptions"] / row["targets"]
return row["games"] >= 14 and catch_rate >= 0.68
Target share is the whole game here. Two TEs can carry the same target share while one is a sure-handed, always-active possession guy and the other is a boom-or-bust athlete who leaks games and drops the tough ones. If the floor signal is real, it should separate those two players' Y+1 output even when their raw workload matches.
How I beat on it
scripts/h77_te_possession_floor_vs_upside.py builds Y to Y+1 pairs from player_stats_season.csv (REG only, TE position, 2015-2024 Y0, 8+ Y0 games, 30+ Y0 targets). Scored in full_ppr_te_premium (1.0 per reception plus the 0.5 TE bonus), the format G-52 named specifically, because that extra half point on every incremental catch is exactly where a floor-vs-ceiling gap would show up loudest. n=260 pairs. Framework: Session 97 two-gate spec.
What the data actually said
First swing: aggregate. Possession-floor TEs (games>=14, catch_rate>=0.68, 88 of 260 seasons) averaged 2.35 more Y+1 ppg than the rest. That is the kind of gap that could just be volume in disguise.
Aggregate first. Bands second. Because aggregates lie.
| Target share band | Floor n | Floor Y+1 ppg | Rest n | Rest Y+1 ppg | Delta |
|---|---|---|---|---|---|
| ts>=0.20 (TE1-ish) | 24 | 16.44 | 31 | 12.76 | +3.67 |
| 0.16-0.20 | 14 | 13.12 | 34 | 10.82 | +2.30 |
| 0.13-0.16 | 18 | 10.48 | 33 | 10.16 | +0.32 |
| 0.10-0.13 | 17 | 9.58 | 38 | 8.65 | +0.93 |
| <0.10 (TE2-ish) | 15 | 9.19 | 36 | 7.08 | +2.10 |
Every band points the same direction, and the two that clear the bar hardest sit at opposite ends of the tier: the elite band, where the engine's TE1-12 bullishness lives, and the sub-0.10 band, the streaming-TE range lumped into "TE13-24, don't bother differentiating." The floor signal is not an artifact of workload. It shows up in a bell-cow at 20 percent share and a committee guy at 8 percent share alike.
Dalton Schultz's 2020 season is the model case: 16 games, 0.708 catch rate, dead in the middle of the floor cohort. His 2021 followed with 17 games, 808 yards, 8 touchdowns. Kyle Pitts' 2021 sits on the other side: 17 games but a 0.618 catch rate, high target share riding on contested-catch upside instead of sure hands. His 2022 collapsed to 10 games at replacement level, already on record in our outcome-tracking data as one of the biggest TE misses of the decade.
What the engine already figured out
SignalTuned doesn't currently encode this. The TE archetype classifier reads target_share alone, splitting receiving-TE, hybrid, and standard roles, and only uses that number to slow the post-peak decline slope. Catch rate and games played never enter a forward Y+1 projection. The engine's bullishness on the Schultz/Engram class at the top of the tier is earned, our data agrees, but it never checked whether the same signal applies further down the board, where it currently paints with one bearish brush.
What to do about it
Inside the TE13-24 range, stop pricing every name the same. A possession-floor TE at streaming-TE ADP, missed almost no games, catches almost everything thrown his way, is a legitimate buy even though the tier average looks bearish. The low-catch-rate athletic-upside TE at the same target share is the one carrying real risk, exactly what the boom-or-bust content already warns about, just without the receipts to separate him from his floor-having tier-mate.
On the engine side, this stages as new information, not a live change. Catch rate is a rate stat built from a scored number, so our own orthogonality gate requires a residual test against the engine's own projection before it earns a tier adjustment; a Gate-1 cohort pass alone isn't enough. It lands in experimental_features.te_possession_floor_lift at weight zero, watched, not flipped. The receipts are strong enough to chase. Not yet strong enough to move a rank on their own.