Over the Apron

Rules Coverage & Accuracy

Exactly what the engine models, what's approximate, and what isn't modeled yet — verified by 100 unit tests against the CBA's own text, and by replaying real 2026 free-agency moves through the engine. No hand-waving.

Modeled & tested

(30)

Enforced by the rules engine and covered by unit/golden tests.

  • 2026-27 official thresholds: cap, luxury tax, first apron, second apron, MLEs, BAE, minimums
  • All exception / tier amounts cross-checked against the CBA's own %-of-cap formulas (BAE 3.32%, NT-MLE 9.12%, Room MLE 5.678%, Taxpayer MLE, min-team 90%, max 25/30/35%)
  • Trade salary matching — expanded bands (200%+$250k / outgoing+$7.5M / 125%+$250k)
  • Apron teams limited to 100% matching (no 110%)
  • Below-cap absorption capped at cap+$250k (or standard matching if larger)
  • Hard-cap triggers: NT-MLE / BAE / sign-and-trade → first apron; Taxpayer MLE → second apron
  • Second apron: no aggregation (bin-packing combination test), no cash out; exact-boundary tiers use strict 'exceeds'
  • Exception gating by apron tier: cap room, NT-MLE, Taxpayer MLE, Room MLE, BAE, minimum, Bird
  • Maximum-salary tiers by years of service (25% / 30% / 35%)
  • Bird / Early-Bird / Non-Bird re-signing ceilings (175% / 120%-of-prior-or-min, etc.), with each FA's real Bird-rights status and UFA/RFA designation
  • Multi-year committed-salary cap sheet (4 seasons per team)
  • Veteran extension & extend-and-trade first-year ceilings (140% / 120% of prior-or-estimated-average)
  • Renegotiation ceiling (under-cap teams only, raise limited to cap room) and the stretch provision (2N+1 years, 15%-of-cap guardrail)
  • Renounce free-agent cap holds to drop below an apron / open cap space; a kept own-FA hold converts to salary on re-sign (no double-count), and renouncing forfeits Bird rights
  • Contract extensions add future years at the veteran-extension ceiling (140% rule, 8% raises)
  • Free-agent cap holds by Bird status (Non-Bird 120% / Early-Bird 130% / Bird 150–190%)
  • Trade eligibility: a free agent signed this offseason is trade-restricted; a just-acquired player can't be aggregated for ~2 months
  • MLE / exception consumption tracking within an offseason session
  • Sign-and-trade acquisition: second-apron block + first-apron hard cap on the acquiring team
  • Base-year compensation: re-sign your own FA to a >20% raise over the cap, then trade — outgoing value = max(50% of new salary, prior salary)
  • Trade kicker bonus boosts the acquiring team's incoming matching value (applied when kicker data is present)
  • Sign-and-trade outgoing leg: build a return package to the FA's old team — validates both the acquirer's first-apron hard cap and the old team's salary matching
  • Pick-ownership ledger: executed trades actually transfer draft picks; boards show real inventory
  • Ted Stepien rule against full pick inventory — sees picks traded in PRIOR moves, not just the current proposal
  • Restricted free agents: Gilbert Arenas first-year cap (1-2 YOS → NT-MLE) and a real match flow — the original team can match your offer sheet and keep the player at your terms
  • Roster limits: 21-player offseason hard cap on signings, 15-by-opening-night warning
  • Sign-and-trade contracts enforce the 3–4 season term (§8(e)(1)(ii)) AND the acquirer must have room or match salary with the return package (§8(e)(1)(vii))
  • Trade freezes per Art. VII §8(d)/(f): rookie signings 30 days; FA signings Dec 15; over-cap Bird re-signs at >120% until Jan 15; extensions beyond extend-and-trade limits 6 months; matched RFA offer sheets one year (§5(j))
  • Renegotiation Mar–Jun blackout window
  • Validated against reality: every real July 1, 2026 trade, sign-and-trade, and signing replays as legal through the engine (see lib/realmoves.test.ts)
~

Approximate

(7)

Directionally correct; limited by available data. Flagged in-app.

  • ~Bird sub-type is sourced from public free-agent listings for ~half of free agents; the rest default to full Bird
  • ~Rookie-scale salaries are scaled estimates until the official 2026 scale posts
  • ~Team salary totals include some non-guaranteed / dead-money rows from the source
  • ~Years of service covers ~91% of players; the rest default to a mid-career value
  • ~Early-Bird / extension average-salary alternative uses an estimated figure until the official one posts
  • ~Trade-value numbers (5–99) estimate production vs. contract — wins produced, dollar-valued, against salary, term, and age — calibrated to real 2026 deals; directional, not gospel
  • ~Draft-pick trade values project the origin team’s slot from roster strength (mean-reverting for far-out years) onto a rookie-contract surplus curve — same units as player values

Not yet modeled

(7)

Real CBA rules on the roadmap — the honest gap to front-office-complete.

  • Pick protections & swap rights on ledger picks (protections shown in deal text; the ledger tracks unprotected ownership)
  • The >10%-renegotiation-blocks-a-later-extension rule
  • Traded-player exceptions as separate expiring objects
  • Likely vs. unlikely incentives in matching / apron math
  • Second-round pick exception & two-way contracts as signing mechanisms (reconciled from real data, not user-simulable)
  • Poison-pill provision (engine function exists; not wired to the trade UI — needs structured extension data)
  • Designated-player criteria (All-NBA/MVP triggers, 6-year DV extension length)