Overview sprint · review

#1345 head ba4e507b · stack top #1350 5c63836f · draft, not merged · recorded data 2026-10-20 (after Week 6)

12 / 12 teams
cap ledgers add up exactly in the page (7 checks each), including negative adjustments, IR halves and rounding.
= MFL’s data
Player salaries and each adjustment category equal MFL’s raw data for every team; totals differ from MFL’s exact sum only by the canon §6 rounding (8 teams, −$250 to +$500).
18 / 18 slots
Overall uses every starting slot for all 12 teams; positions add up to Overall; the original chart is unchanged.
Tue Nov 24 · 12:00 PM ET
the Trade deadline card shows MFL’s own close (the league calendar says Nov 25).
249 passed, 0 failed
full safe suite on 5c63836f merged locally with main 216b0087. On 5c63836f alone: 224 passed, 1 failed.
9 / 9
bugs put back on purpose; each made its test fail.

Review checklist (about 5 minutes)

  1. Open Front Office; you land on Overview. Look at the Cap card.Player salaries $286,000 · Salary adjustments +$9,000 · Total allocated $295,000 of $300,000 · Cap space $5,000.
  2. Click Player salaries.Active roster (30) $270,000 · Injured reserve (4) $32,000 · Taxi squad (3) $8,000 → $310,000 on the roster; relief: IR −$16,000, taxi −$8,000 → $286,000, with “✓ Adds up”. Open “Active roster” to see every player.
  3. Close it (Esc or ×) and click Salary adjustments.Seven drops (+$9,200 exact), “Rounding to the nearest $1,000 (canon §6)” −$200 → cap penalties +$9,000; traded salary $0; miscellaneous $0; total +$9,000 ✓. The 2027 drops are listed separately, outside the total.
  4. Look at Lineup strength (Above repl. is selected).Overall +2.9, QB −2.9, RB −15.0, WR +18.6 … K −0.3, P 0.0: the same numbers as your row in Trades → Trade finder. K and P are faded.
  5. Click PPG, Index, then Rank.PPG: Overall 240.6, WR 77.9, RB 18.0. Index: Overall 100, WR 155, RB 49. Rank: Overall 6th, WR 1st, RB 12th, DL 3rd.
  6. Look at Trade deadline.“N days · MFL stops trades Tue, Nov 24, 12:00 PM ET” (35 days on Oct 20). Signed out of MFL, the live card says “Sign in to MFL to see when MFL stops trades”.
  7. Check the cards.Cap, Roster, This week, Trade deadline, Needs attention, Lineup strength, Draft picks. No “Contracts ending this season”.
  8. Narrow to about 1024 px, then open Inside an MFL-style page.No sideways scroll; cards reflow to two columns; the ledgers open there too.

Before / after

Before: the previous draft (7c2b4005). Allocated-only cap card; Lineup strength showed stale numbers (RB −19.3, WR +28.0) that disagreed with the Trade finder (−15.0, +18.6); deadline from the league calendar; Contracts ending this season.
Before: the previous draft (7c2b4005). Allocated-only cap card; Lineup strength showed stale numbers (RB −19.3, WR +28.0) that disagreed with the Trade finder (−15.0, +18.6); deadline from the league calendar; Contracts ending this season.
After: four-line Cap card with two ledgers; Lineup strength with Overall, K, P and four views, matching the Trade finder; MFL’s deadline; Contracts ending removed.
After: four-line Cap card with two ledgers; Lineup strength with Overall, K, P and four views, matching the Trade finder; MFL’s deadline; Contracts ending removed.
Player salaries ledger.
Player salaries ledger.
Salary adjustments ledger (2027 drops listed outside the total).
Salary adjustments ledger (2027 drops listed outside the total).
PPG view.
PPG view.
Index view (100 = league average).
Index view (100 = league average).
Rank view.
Rank view.
Player list inside the ledger.
Player list inside the ledger.
1024 px: two-column cards, no sideways scroll.
1024 px: two-column cards, no sideways scroll.
Inside an MFL-style page (1440).
Inside an MFL-style page (1440).
Inside an MFL-style page (1024).
Inside an MFL-style page (1024).
Ledger inside the MFL-style page.
Ledger inside the MFL-style page.

Cap reconciliation, all 12 franchises

In-page: Front Office’s capLedger vs its own cap card (capFor): groups add up, player salaries = card, adjustments = card, items add to their category, allocated = card, cap space = card, salaries + adjustments = allocated. Independent: recomputed from the raw recorded data with MFL’s formula (ROSTER salaries + IR at 50% + every MFL salary adjustment; taxi excluded), outside the Front Office code.

TeamActiveIR (salary → counts)TaxiReliefPlayer salariesPenalties exact · roundingTradedMiscAdjustmentsTotal allocatedCap spaceIn-page checksMFL formula (exact)Difference
Blake Bombers$310,000 (28)$6,000 → $3,000 (2)$25,000 (7)−$28,000$313,000+$5,000 · $0−$32,000$0−$27,000$286,000$14,0007/7 ✓$286,000none ✓
C-Town Chivalry$246,000 (29)$6,000 → $3,000 (2)$16,000 (6)−$19,000$249,000+$15,500 · +$500+$19,000$0+$35,000$284,000$16,0007/7 ✓$283,500rounding +$500 ✓
CBP$281,000 (29)$33,000 → $16,500 (4)$18,000 (8)−$34,500$297,500+$4,000 · $0−$12,000$0−$8,000$289,500$10,5007/7 ✓$289,500none ✓
Cleon Ca$h$276,000 (29)$11,000 → $5,500 (2)$23,000 (9)−$28,500$281,500+$2,100 · −$100$0$0+$2,000$283,500$16,5007/7 ✓$283,600rounding −$100 ✓
Gride$249,000 (30)$52,000 → $26,000 (5)$22,000 (8)−$48,000$275,000+$20,250 · −$250−$10,000$0+$10,000$285,000$15,0007/7 ✓$285,250rounding −$250 ✓
HammerTime 🔨 ⏰$255,000 (30)$7,000 → $3,500 (1)$20,000 (10)−$23,500$258,500+$10,800 · +$200+$20,000$0+$31,000$289,500$10,5007/7 ✓$289,300rounding +$200 ✓
Hawks$272,000 (30)$1,000 → $500 (1)$16,000 (7)−$16,500$272,500+$6,500 · +$500$0+$3,000+$10,000$282,500$17,5007/7 ✓$282,000rounding +$500 ✓
L.A. Looks$275,000 (29)$14,000 → $7,000 (4)$20,000 (9)−$27,000$282,000+$12,550 · +$450$0$0+$13,000$295,000$5,0007/7 ✓$294,550rounding +$450 ✓
Pure Greatness$284,000 (28)$15,000 → $7,500 (2)$18,000 (10)−$25,500$291,500+$1,000 · $0$0$0+$1,000$292,500$7,5007/7 ✓$292,500none ✓
Real Deal Creel$270,000 (30)$32,000 → $16,000 (4)$8,000 (3)−$24,000$286,000+$9,200 · −$200$0$0+$9,000$295,000$5,0007/7 ✓$295,200rounding −$200 ✓
Sex Manther$246,000 (30)$20,000 → $10,000 (4)$20,000 (9)−$30,000$256,000+$36,000 · $0+$5,000$0+$41,000$297,000$3,0007/7 ✓$297,000none ✓
The Long Haulers$223,000 (30)$68,000 → $34,000 (3)$23,000 (9)−$57,000$257,000+$4,750 · +$250$0$0+$5,000$262,000$38,0007/7 ✓$261,750rounding +$250 ✓

Every team passes all seven in-page checks. Player salaries and each adjustment category equal MFL’s data. Total allocated equals MFL’s exact sum except for the drop-penalty rounding Front Office already applies (canon §6: penalties round to the nearest $1,000 per team; the true-up posts to MFL at the Auction Cut Deadline). The ledger shows that rounding as its own line, so the card and the ledger agree; MFL’s own screen can differ by that amount until the true-up.

Lineup strength: definitions

Current (the original chart, unchanged)

  1. Player value = season points per MFL-scored week (MFL’s league scoring, Wks 1–6 final; a player with no MFL week = 0).
  2. Available now = active roster (not taxi, not IR) and no IR/PUP/NFI/SUSP/HOLD/RET/OUT designation. Byes are not considered.
  3. Best legal lineup = the released 18-slot engine (QB, 2 RB, 2 WR, TE, 2 Flex, SuperFlex, K, P, 2 DL, 2 LB, 2 DB, D-Flex), filled from available players plus replacement free agents: the 3rd-best free agent at QB/RB/WR/TE, 6th at K/P, 12th at DL/LB/DB, and the next ones down. A replacement starts wherever it beats the team’s own option, not only in an empty slot.
  4. Strength at a position = Σ over the starters at that position (Flex/SuperFlex/D-Flex count for the player’s own position) of (PPG − the 1st replacement PPG for that position).
  5. Shown = strength − the median strength of the 12 teams (rounded to 0.1). Seven rows (QB–DB). Bars were scaled to the team’s own largest row.

Proposed (built, all from one table over the same 12 lineups)

Real Deal Creel, recorded Week 7 (12 teams, 18 slots, 1075 free agents in the replacement pool):

RowStartersPPGLeague mean PPGIndexRankReplacement PPGAbove repl.League median abovevs median (chart)
Overall18 (3 repl.)240.7241.41006—85.582.6+2.9
QB242.945.794810.7021.524.4-2.9
RB2 (1 repl.)18.036.449127.952.117.1-15.0
WR477.950.315519.3240.621.9+18.6
TE114.323.76188.455.97.5-1.6
DL221.217.212336.757.83.1+4.7
LB217.118.99097.172.83.2-0.4
DB331.028.710838.704.92.7+2.2
K1 (1 repl.)9.911.28879.880.00.3-0.3
P1 (1 repl.)8.39.39068.330.00.0+0.0

Population check: every team has 18 Overall starters, one K and one P; position PPGs add up to Overall; every position’s vs-median equals the Trade finder model. All pass.

Trade deadline: MFL vs other sources

SourceCloses trades
MFL League Calendar (public page, read 2026-10-21 00:23 UTC)Tue Nov 24, 12:00 PM ET (“No Trades Allowed”); two more events Wed Nov 25 8:00 PM ET
League calendar (/api/league-events; the old card, the phone Home chip)Wed Nov 25 (date only)
Commish Settings (per #1217)Wed Nov 25, 8:00 PM ET
Canon rule text“NFL Thanksgiving week kickoff” = Wed Nov 25, 8:00 PM ET in 2026
Canon 2026 date rowsThu Nov 26

The card now reads MFL’s calendar export (TYPE=calendar) with the viewer’s MFL session. MFL serves that export only to a signed-in league member, so this preview uses a stand-in built from the three events on MFL’s public calendar page; the live card reads MFL directly. Nothing on MFL or in canon was changed. #1217 (reminders) is still open.

Tests

Bug put backTestResultRun
Overall skips K and Plineup_strength_views.test.mjscaught1/4 tests passed, 623 assertions, 3 FAILED
Index on the median, not the meanlineup_strength_views.test.mjscaught3/4 tests passed, 904 assertions, 1 FAILED
Rank by above-replacement instead of PPGlineup_strength_views.test.mjscaught3/4 tests passed, 336 assertions, 1 FAILED
IR relief takes the whole salaryfo_cap_ledger.test.mjscaught3/4 tests passed, 21 assertions, 1 FAILED
Penalty rounding dropped from the totalfo_cap_ledger.test.mjscaught2/4 tests passed, 19 assertions, 2 FAILED
Deadline from the LAST trade eventfront_office_overview_cards.test.mjscaught3/4 tests passed, 23 assertions, 1 FAILED
Deadline label via toLocaleString (Safari says "at")front_office_overview_cards.test.mjscaught3/4 tests passed, 24 assertions, 1 FAILED
Overview renders before boot (no guard)front_office_overview_cards.test.mjscaught4/5 tests passed, 31 assertions, 1 FAILED
Model cache keyed before the players list refresh (the stale-strength bug)front_office_rank_universe.test.mjscaught4/5 tests passed, 22 assertions, 1 FAILED

Not verified

Decisions before finalizing

  1. Lineup strength default view. Recommend keeping Above repl. as the default (continuity with the Trade finder), with PPG/Index/Rank one click away.
  2. Replacement starters in PPG/Index/Rank. Today’s model fills any slot where a replacement free agent beats the team’s own option (Real Deal Creel: 3 such starters, RB/K/P; one team has 6). Recommend keeping one population (consistent with the chart) and noting “includes N replacement-level starters”; the alternative is rostered players only (empty slot = 0), which would make the views disagree with Above repl.
  3. Average for Index = mean; the original chart uses the median. Recommend leaving the chart on the median (no silent redefinition).
  4. Flex attribution. Position rows count Flex/SuperFlex/D-Flex starters by the player’s position, so rows add up to Overall. Alternative: fixed slots per position + a separate Flex row. Recommend keeping.
  5. Cap rounding vs MFL’s screen. Front Office shows drop penalties rounded per canon §6 (8 teams differ from MFL’s exact sum by −$250 to +$500 until the true-up posts). Recommend keeping, with the rounding line in the ledger.
  6. Trade deadline. MFL closes Tue Nov 24 noon; the league calendar, Commish Settings and canon say Nov 25–26. Your ruling on the rule and MFL’s calendar (not changed here); #1217 waits on it.
  7. Signed-out deadline card. Without an MFL sign-in the card says “Sign in to MFL to see when MFL stops trades” instead of the league calendar date. Recommend keeping.